Просто добавив два моих цента к вершине Ответ Таруна .
Когда я увидел, что Джерси проверяет классы ресурсов, я пытался придумать вариант использования, почемубыть подтвержденным.И причина, по которой я могу придумать, - это случай, когда мы вводим @PathParam
s и другие @XxxParam
s как поля в ресурс
@Path("/person/{email}")
public class PersonResource {
@Email // email constraint validator
@PathParam("email")
private String email;
}
вместо внедрения @PathParam
в метод ресурсапараметр, как вы обычно видите, мы вводим его как поле.И когда ресурс проверяется, поле email
будет проходить через валидатор ограничения электронной почты.
Что касается свойств, они могут быть полями или методами стиля JavaBean (которые также называются «свойствами»)."), которые являются методами получения и установки, начинающимися с get
и set
, соответственно.Таким образом, наше именование методов с помощью get
и set
добавляет их в список свойств.
Теперь я не знаю, подумали ли разработчики об этом при разработке кода, но если они это сделали иони решили, что это не проблема, я бы предположил, что их аргумент таков: проверка бина на Джерси предназначена для проверки входящих данных;это могут быть данные, поступающие от клиента в виде тела объекта или в виде различных параметров, таких как путь, заголовок или строка запроса.Общим фактором является то, что все они поступают от клиента.Следовательно, если нарушено какое-либо ограничение, это будет ошибка клиента , следовательно, статус ответа 400 Bad Request, что означает ошибка клиента .
сказал, что когда у нас есть возвращаемые значения в наших ресурсных методах, это не собранных клиентом данных;это значения, полученные при обработке на стороне сервера.Поэтому, если на эти объекты нарушено какое-то ограничение, они не должны обрабатываться с той же семантикой, что и клиентские входящие объекты.Да, вы можете захотеть, чтобы эти объекты были проверены, но IMO, это должно быть проверено в другом процессе и не должно приводить к тем же 400, что было бы с ошибкой на стороне клиента.Это должно привести к 500 внутренних ошибок сервера.Это определенно не ошибка клиента, что есть проблема с возвращаемым значением.Мы, как разработчики, должны выполнить эти проверки.
Теперь, если вы do хотите самостоятельно проверить возвращаемое значение, вы можете просто использовать API-интерфейсы валидации, чтобы выполнить валидацию вручную.И чтобы сделать его СУХИМЫМ и прозрачным, вы можете использовать возможности AOP HK2 (Jersey DI) для перехвата вызова метода.Я собрал PoC в этом GitHub репо .