在给定的示例中,对 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"
}