首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring Mockmvc忽略未知字段

Spring Mockmvc忽略未知字段
EN

Stack Overflow用户
提问于 2021-10-25 16:45:06
回答 1查看 30关注 0票数 1

API方法已经使用@Valid注解进行了验证。当我使用postman测试此方法,并发布一个未知字段时,它可以工作,并拒绝请求。但是,当我使用mockMvc进行测试时,mockMvc会忽略未知字段。我想知道如何强制mockMvc来考虑API方法中的验证。

控制器

代码语言:javascript
运行
复制
@PostMapping(value = "/path", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> notification(@Valid @RequestBody RequestClass requestPayload) {

}

测试方法

代码语言:javascript
运行
复制
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
                .post("/path" )
                
                .content("{\"fakeField\":\"fake\",\"userId\":\"clientId\"")
                .contentType(MediaType.APPLICATION_JSON_VALUE);

        String responseMessage = "Error message";

        this.mockMvc =
                standaloneSetup(myController)
                .build();

        this.mockMvc
                .perform(builder)
                .andDo(print())
                .andExpect(status().is(HttpStatus.BAD_REQUEST.value()))
                .andExpect(content().string(containsString(responseMessage)));
EN

回答 1

Stack Overflow用户

发布于 2021-10-26 07:41:11

检查未知字段并返回400 (BAD_RQUEST)是Jackson ( ObjectMapper)的一个反序列化功能。它不是由Java的Bean验证处理的。

对于自定义的MockMvc独立设置,您可以选择不使用默认的Spring Boot自动配置,它将根据您配置的功能配置ObjectMapper

我建议使用@WebMvcTest(YourController.class) for your controller tests,然后注入自动配置的MockMvc

代码语言:javascript
运行
复制
@WebMvcTest(YourController.class) // auto-configures everything in the background for your, including the ObjectMapper
class YourControllerTest {

  @Autowired
  private MockMvc mockMvc;


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69711852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档