我的REST服务需要返回格式的消息:用杰克逊来包装子类属性到部分关键
{
"code": 1000,
"message": "Success",
"description": null,
"data": [
{
"custId": "00000023401443",
"engName": "MISTER NORWAYTEST'S PASSPORT",
}
]
}
在JSON消息的第一层基本上是这样的消息头,可以提供有关技术细节消息传递,而“数据”键包含实际的商业信息。
如果我要创建一个类来反映这一点,我会在默认情况下出来的东西,看起来像这样:
public class ResponseModel<T> implements Serializable{
private Integer code;
private String message;
private String description;
@JsonProperty(value = "data")
private T dataObj;
}
,但做这种方式引起我的控制器都返回与同一对象没有真正的商业环境中的价值类名和降低可读性:
@GetMapping("/profile/{userId}")
public ResponseEntity<ResponseModel> getProfile(@PathVariable String userId) {
...
}
我想要做的是使用ResponseModel作为超,然后将它们继承与实际的业务上下文名称的子类(如客户或账户) 。但为了坚持所需的JSON格式,我需要确保将子类的属性包装到“数据”键中。
有没有办法可以做到这一点?使用@JsonRootName也会包装超类属性。