我想在不同的设备上以不同的方式处理 json 到对象的转换@RequestMapping
在我的控制器中。
我相信,如果我们在 spring-boot 项目中添加 Jackson 依赖项,它会处理 json 到对象的转换,#spring.jackson.deserialization.fail-on-unknown-properties=true
property 将确保如果 json 中存在一些未知属性,转换将会失败(如果我错了,请纠正我)。
我们能否在本地告诉 Jackson 何时在未知属性上失败以及何时忽略这些属性。
以下是使用标志的代码片段。
@GetMapping(value = "sample")
public @ResponseBody UserDTO test(@RequestParam String str, @RequestParam boolean failFast) {
ObjectMapper map = new ObjectMapper();
if( failFast) {
map.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
} else {
map.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
UserDTO userDTO = null;
try {
userDTO = map.readValue(str, UserDTO.class);
} catch (IOException e) {
e.printStackTrace();
}
return userDTO;
}
我不需要像我正在使用的那样在运行时处理它@RequestParam.
是否有一些属性可以用来标记映射,在哪里检查未知属性以及在哪里忽略它们。
Edit:
我正在寻找的是更改现有应用程序以处理每个映射的未知属性。例如:
@PostMapping(value = "fail/fast")
public @ResponseBody UserDTO test(@FAIL_ON_UNKNOWN @RequestBody UserDTO userDTO, @RequestParam boolean failFast) {
..///processing...
return userDTO;
}
@PostMapping(value = "fail/safe")
public @ResponseBody UserDTO test( @RequestBody UserDTO userDTO, @RequestParam boolean failFast) {
..///processing...
return userDTO;
}
如果可以为每个映射添加一些验证之王,那么我不需要更改所有现有映射来自定义未知属性,并且代码更改将是最少的。