JSON与Spring的嵌套集合对象
问题描述:
我是Spring框架的新手,尝试构建RESTful Web服务。现在我有点卡住了这个问题。JSON与Spring的嵌套集合对象
我有一些实体类一样的UserDetails(getter/setter方法,equals()和hashCode()方法略):
public class UserDetails {
private Long userId;
private String login;
private String firstName;
private String lastName;
private Map<ActionDetails, Boolean> confirmedActionsMap;
}
和ActionDetails(再次getter/setter方法,equals()和hashCode()方法略) :
public class ActionDetails {
private Long actionId;
private String actionName;
private String actionDescription;
}
我在@RestController返回的UserDetails的方法:
@GET
@RequestMapping("/user")
@Produces ({ "application/json" })
public ResponseEntity<User> getUser(){
UserDetails userDetails = //obtaining user somehow
return new ResponseEntity<User>(userDetails, HttpStatus.OK);
}
但作为回应,我得到JSON在地图ActionDetails不序列化JSON,但简称的toString()就可以了:
{
"userId": 1,
"login": "j.doe",
"firstname": "John",
"lastname": "Doe",
"confirmedActionsMap": {"[email protected]": true}
}
ActionDetails自己与否有关其他控制器方法返回的是序列化到JSON就好了。 什么是最适合序列化REST中的集合中的对象的方法?
答
A Map
是key
,value
对的表示。在密钥上调用toString()
是表示密钥的唯一合理方式。
如果你想序列化ActionDetail
不同,我建议在另一个类包装ActionDetail
,Boolean
并把在一个List
。
例如:
public class UserDetails {
private Long userId;
private String login;
private String firstName;
private String lastName;
private List<ActionDetailWrapper> confirmedActions;
}
public class ActionDetails {
private Long actionId;
private String actionName;
private String actionDescription;
}
public class ActionDetailWrapper {
private ActionDetails actionDetails;
private Boolean result;
}
另外,您可以键入您的Map
使用actionId
从ActionDetails
并添加Boolean
到ActionDetails
类。
它调用ActionDetails.toString(),因为在这种情况下它是地图的关键。 –
我建议创建两种类型的列表confirmedActionsList和NotConfirmedActionsList并省略布尔值。 –