Интерфейс реализации контроллера не создается после добавления аннотации @Validated spring - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть ниже RestController, где я пытаюсь проверить карту входных параметров метода search () для пустых.Однако во время модульного тестирования этот RestController не создается, когда он реализует интерфейс ServiceIF.Если я комментирую реализующий интерфейс, то создается экземпляр контроллера, и валидация работает правильно.Я не понимаю, почему аннотирование @Validated для класса, который реализует некоторый интерфейс, не работает.

@Validated
@RestController
public class MyServiceImpl implements ServiceIF{

    @RequestMapping(value = "search", method = RequestMethod.POST, produces = APPLICATION_JSON)
    public ResponseEntity<Object> search(@RequestBody @NotEmpty Map<String, String> body) {
    }
}

Я пишу приведенный ниже модульный тест для проверки пустой карты:

RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { Application.class})
public class MyServiceImplTest {

    @Autowired
    private ServiceIF controller;
    private MockMvc mockMvc;

    @Before
    public void setUp(){
            mockMvc = MockMvcBuilders.standaloneSetup(controller)
                                    .setControllerAdvice(new InputValidationsExceptionHandler())
                                    .build();
    }

    @After
    public void tearDown(){
            mockMvc = null;
    }

    @Test
    public void testSearchInvalid() throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        Map<String, String> map = new HashMap<>();
        String data = mapper.writeValueAsString(map);

        //Test invalid case
        this.mockMvc.perform(post("/search").content(data)
                                .contentType(MediaType.APPLICATION_JSON))
                                .andDo(print())
                                .andExpect(status().isBadRequest());

    }
} 

1 Ответ

0 голосов
/ 08 декабря 2018

Возможно, проблема в интерфейсе ServiceIF.Если ServiceIF.search параметр метода не имеет аннотации @NotEmpty.Вы получите исключение при запуске приложения:

javax.validation.ConstraintDeclarationException: HV000151: метод, переопределяющий другой метод, не должен переопределять конфигурацию ограничения параметров

см. эта спецификация

...