java - @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
andadditionalDetails
不应该用@JsonUnwrapped
.
相反,应该创建一个响应来扩展请求类,具有一个复制构造函数,并覆盖适当的 getter 注释为@JsonUnwrapped
.
下面的示例使用 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"
}
推荐阅读
- wordpress - phpmyadmin 未使用 docker 连接----配置中定义的 controluser 连接失败
- amazon-web-services - 无需配置密钥且仅具有 IAM 角色即可触发 s3 访问
- kubernetes - Istio 阻止与 MySQL 的连接
- python - 如何使用不同的参数并行运行相同的函数?
- python - 无法训练或测试数据
- nstextview - NSTextView -> cacheDisplay 丢失了一些下划线,但没有其他下划线
- git - git-p4 在哪里保存有关 perforce depot 的信息
- vercel - Zeit/Now - 在不更改链接的情况下更新现有部署 - 有可能吗?
- sql - 没有公共键的 SQL 连接
- influxdb - 在influxDB中获取给定时间最后存储的值