如何解决@JsonUnwrapped 将 null 设置为子 pojo 类的值
请求:
{
"name":"iswarya","dept":{
"deptName":"eee","location":"firstfloor"
},"additionalDetails":{
"projectName":"finalyearproject"
}
}
回复:
{
"name": "iswarya","deptName": null,"location": null,"projectName": null
}
控制器类:
@PostMapping(value="/objectMApper")
public String createEmployee(@RequestBody AnnotationTestBean demoEntity) throws JsonProcessingException {
ObjectMapper obj=new ObjectMapper();
return obj.writeValueAsString(demoEntity);
}
解决方法
在给定的示例中,对 JSON 的请求未包装,因此其 dept
和 additionalDetails
不应使用 @JsonUnwrapped
进行注释。
相反,应该创建一个响应,扩展请求类,具有复制构造函数,并覆盖注释为 @JsonUnwrapped
的适当 getter。
下面的示例使用 Lombok 注释来生成 getter/setter/constructors。
@Data
@AllArgsConstructor
@NoArgsConstructor
static class Request {
private String name;
private Department dept;
private Details additionalDetails;
}
@Data
static class Department {
private String deptName;
private String location;
}
@Data
static class Details {
private String projectName;
}
static class Response extends Request {
public Response(Request request) {
super(request.name,request.dept,request.additionalDetails);
}
@Override @JsonUnwrapped
public Department getDept() { return super.getDept(); }
@Override @JsonUnwrapped
public Details getAdditionalDetails() { return super.getAdditionalDetails(); }
}
测试
ObjectMapper om = new ObjectMapper();
String json = "{\r\n" +
" \"name\":\"iswarya\",\r\n" +
" \"dept\":{\r\n" +
" \"deptName\":\"eee\",\r\n" +
" \"location\":\"firstfloor\"\r\n" +
" },\r\n" +
" \"additionalDetails\":{\r\n" +
" \"projectName\":\"finalyearproject\"\r\n" +
" }\r\n" +
"}";
Request request = om.readValue(json,Request.class);
Response response = new Response(request);
String str = om.writerWithDefaultPrettyPrinter().writeValueAsString(response);
System.out.println(str);
输出
{
"name" : "iswarya","deptName" : "eee","location" : "firstfloor","projectName" : "finalyearproject"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。