我在RestController下方有一个试图在其中验证search()方法输入参数映射为空的地方。但是,在单元测试期间,当实现ServiceIF接口时,不会实例化此RestController。如果我评论实现接口,则将实例化控制器,并且验证工作正常。我不明白为什么为实现某些接口的类注释@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());
}
}
答案 0 :(得分:0)
问题可能出在ServiceIF
界面中。如果ServiceIF.search
方法参数没有注释@NotEmpty
。您将在应用程序启动时得到异常:
javax.validation.ConstraintDeclarationException:HV000151:覆盖另一个方法的方法一定不能重新定义参数 约束配置
请参阅this spec