Как я могу добавить проверки для конечной точки отдыха весенней загрузки с параметром строки? - PullRequest
0 голосов
/ 07 ноября 2018

как проверить конечную точку отдыха с пружинной загрузкой с параметром String, вот пример моей конечной точки.

@ResponseBody
@RequestMapping(value = "/getProfile", method = RequestMethod.POST,  produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> getProfile(@RequestBody @Valid @NotEmpty String profileId){}

даже думал, что я добавил ограничение @valid и @NonEmpty, которое не подтверждается.

но это работает для других классов. например,

@ResponseBody
    @RequestMapping(value = "/saveProfiles", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Object> saveProfiles(@RequestBody @Valid PersistProfilesRequest request){}

здесь все поля в классе PersistProfilesRequest, к которым применено ограничение, проверяются правильно.

Проверка не происходит для параметра метода с классом Java, таким как String и Map.

Я использую spring boot 1.3.0 с валидатором гибернации.

как я могу добавить проверку к конечной точке отдыха со строковым параметром?

EDIT

я использую junit и mockmvc для проверки конечной точки, ниже приведен тестовый пример

@Test
public void testGetProfile() throws Exception{

    String profileId = "   ";

    this.mockMvc.perform(post("/getProfile").content(profileId).accept(MediaType.APPLICATION_JSON).contentType("application/json"))
                .andDo(print())
                .andExpect(status().isInternalServerError());

}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете попытаться аннотировать класс вашего контроллера с помощью @Validated. В моем случае это помогло.

@Validated
@RestController
@RequestMapping(path = "/api/somethin")
public class LegacyRestController {
0 голосов
/ 07 ноября 2018

Spring имеет HttpMessageConverters и некоторые реализации, такие как:

  • MappingJackson2HttpConverter
  • Jaxb2RootElementHttpMessageConverter
  • StringHttpMessageConverter

и т.д.

Похоже, что если вы отправляете String, а StringHttpMessageConverter конвертирует ваш тип StringHttpMessageConverter:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/converter/StringHttpMessageConverter.html

MappingJackson2HttpMessageConverter отвечает за MediaType.APPLICATION_JSON но StringHttpMessageConverter получает все типы

Как я вижу StringHttpMessageConverter преобразует @RequestBody String ...

Строка класса не попала под капот javax.validation аннотаций

Вот почему я думаю, что это не работает

Вам нужно обернуть вашу строку каким-нибудь объектом, например:

public class StringValue{

 @NotEmpty
 private String field;
 //getters and setters
}

public ResponseEntity<Object> getProfile(@RequestBody @Valid StringValue profileId)
...