Как проверить параметр запроса не пустая строка в парамах @RequestMapping?

в моем контроллере у меня есть Строковый параметр, содержащий некоторый id, который не должен быть null пустой строки. Мне интересно, есть ли способ проверить, что это не пустая строка в парамах @RequestMapping? Я пытался решить его в некотором роде

@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) String id)

@RequestMapping(value = someURL, params = {"!id="})
public SomeResponse doSomething(@RequestParam(required = true) String id)

@RequestMapping(value = someURL, params = {"!id="""})
public SomeResponse doSomething(@RequestParam(required = true) String id)

без успеха. Как я понимаю, оба!--2--> и @RequestParam(required = true) можно проверить только этот параметр id представлено в запросе (!= недействительный.)

скорее всего, я должен проверить это с помощью кода в контроллере boby, как

if (id == null || id.isEmpty()) {
    return someErrorResponse;
}

но, пожалуйста, поправьте меня, если я ошибаюсь. Спасибо заранее.

P. S. мое приложение работает на Java 1.7 SE в Апач Томкэт контейнер 7.0.62

3 ответов


в соответствии с кодом Spring, который потребляет эту аннотацию

org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)

что-то вроде этого должно работать:

@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)

если вы хотите быть Java EE совместимым с проверками, используйте @Size(min=1).

Hibernate Validator имеет @NotEmpty аннотация для этой цели. Но это не часть спецификации Java.

кстати, сохранить required=true как указано выше, уведомления не будут обеспечивать наличие param в запросе.

редактировать реакцию на комментарий:

Spring совместим с проверкой Java EE, поэтому аннотация @Size должна работать, если у вас есть API проверки Java EE implmentor на пути к классу. До сих пор я использовал только Hibernate validator. Таким образом, вы можете включить эти функции проверки, добавив это в classpath:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.1.Final</version>
</dependency>

чем вы можете аннотировать свой контроллер с @Validated аннотация и сделайте это:

@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) @Size(min=1) String id)

вы также можете настроить сообщение об ошибке, которое будет отправлено клиенту.

если вы не знакомы с проверкой Java EE, я бы предложил начать изучать ее, поскольку это очень важно, если вы создание конечной точки REST / HTTP. Он откроет для вас новый мир.

начните с Java EE учебник для проверки

соответствующая часть Spring doc


можно использовать defaultValue а в

@RequestParam(value = "id", required = true, defaultValue = "-1") String id

но, опять же, вам придется использовать if like

if(id.equals("-1")){
   return "someErrorPage"
}

В противном случае вы можете создать фильтр для этой цели, как показано в этом примере

как использовать фильтр сервлетов в Java для изменения url-адреса входящего запроса сервлета?