我使用的是一个简单的表单,用户可以在其中输入一些JSON。 我将该输入添加到请求的主体。 当我从正文中检索值时,它不会被格式化/编码为JSON。 取而代之的是像json =%7B%22vrt%22%3A%7B ...... 如何/在哪里指定正文中的值必须是JSON,以便我的控制器可以使用GSON解析它?
提前致谢。 此致
控制器
@PostMapping(value = "/api/sendMessage")
public ModelAndView sendIoTMessage(@RequestBody String json) {
VehicleMessage vehicleMessage = new Gson().fromJson(json, VehicleMessage.class);
MessageProcessor.postVehicleMessage(vehicleMessage);
ModelAndView mav = new ModelAndView();
mav.setViewName("iot");
return mav;
}
表格
<form id="sendMessage" th:action="@{/api/sendMessage}" method="post">
<div class="form-group">
<input class="form-control" th:value="*{json}" id="json" name="json">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
答案 0 :(得分:1)
默认情况下,Spring使用Jackson转换器作为APPLICATION JSON,如果你想使用GSON转换器,那么你需要添加GSONConvertor。
我个人认可选项1
添加GSONConvertor的不同方法:
使用JavaConfig
@Configuration @EnableWebMvc
public class Application extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter < ? >> converters) {
GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
converters.add(gsonHttpMessageConverter);
}
}
使用自定义转换器
@Configuration 公共类CustomConfiguration {
@Bean
public HttpMessageConverters customConverters() {
Collection<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
messageConverters.add(gsonHttpMessageConverter);
return new HttpMessageConverters(true, messageConverters);
}
}
使用自动配置 ..关注此link
答案 1 :(得分:0)
为什么不让Spring(de)为你序列化JSON?此功能应该开箱即用,无需任何自定义配置。
@PostMapping(value = "/api/sendMessage", consumes="application/json")
public ModelAndView sendIoTMessage(@RequestBody VehicleMessage vehicleMessage) {
MessageProcessor.postVehicleMessage(vehicleMessage);
ModelAndView mav = new ModelAndView();
mav.setViewName("iot");
return mav;
}