Bra*_*don 5 java jackson gson mockmvc
我花了一天的时间试图找到解决方案,但找不到任何解决此问题的在线资源。
我正在为我的应用程序使用 Gson 进行消息转换,它在单元测试之外工作正常。我什至添加了一个HttpMessageConvertersbean 来优先于 Jackson,而不是将配置值写入application.yml. 这仅在运行应用程序时有效。
现在我的问题是,我如何使用 Gson 序列化/反序列化MockMvc?我有一个带有@SerializedName("field_one")注释的类,其值与实际名称不同。我最接近找到答案的是下面一个没有帮助的答案:
任何想法如何替换ObjectMapper或MockMvc使用 Gson 而不是 Jackson?
编辑:要添加更多上下文:
当我尝试发送一个Model用 Gson 转换为 Json 的文件时,它立即被拒绝(400),因为我@NotNull对模型中的每个字段都有注释。当它在控制器中反序列化时,它将字段设置为空。下面的例子有@Valid,它确保Model签出。
@RequestMapping(value = "accept", method = RequestMethod.POST)
public Model resp(@Valid @RequestBody Model model){
return model;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,当我到达一个没有 的端点时@Valid,传递了一个让杰克逊满意的 json,然后我得到了一个模型,我无法检查任何字段:
mockMvc.perform(
post("/test/accept")
.contentType(MediaType.APPLICATION_JSON)
.content(json))
.andExpect(jsonPath("$.field_one", is("Hello world!")))
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.AssertionError: No value at JSON path "$.field_one", exception: No results for path: $['field_one']
Run Code Online (Sandbox Code Playgroud)
您必须正确设置MockMvc:
MockMvc mvc = MockMvcBuilders.standaloneSetup(new YourController())
.setControllerAdvice(new SomeExceptionHandler())
.setMessageConverters(new GsonHttpMessageConverter()) //<-- THIS
.build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |