gpt4 book ai didi

java - 使用 Spring 将嵌套集合中的对象转换为 JSON

转载 作者:行者123 更新时间:2023-11-30 06:53:21 24 4
gpt4 key购买 nike

我是 Spring 框架的新手,正在尝试构建 RESTful Web 服务。现在我有点被这个问题困扰了。

我有一些实体类,例如 UserDetails(getters/setters、equals() 和 hashCode() 省略):

public class UserDetails {

private Long userId;
private String login;
private String firstName;
private String lastName;

private Map<ActionDetails, Boolean> confirmedActionsMap;
}

和 ActionDetails(再次获取/设置,省略 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": {"com.example.ActionDetails@d4955b30": true}
}

其他 Controller 方法返回的 ActionDetails 本身可以很好地序列化为 JSON。使用 Spring 在 REST 中序列化集合中的对象的最合适方法是什么?

最佳答案

Map对的表示。对键调用 toString() 是表示键的唯一逻辑方式。

如果您想以不同的方式序列化 ActionDetail,我建议将 ActionDetailBoolean 包装在另一个类中,并将其放入 列表

例如:

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;
}

或者,您可以使用 ActionDetails 中的 actionId 键入您的 Map,并将 Boolean 添加到 >ActionDetails 类。

关于java - 使用 Spring 将嵌套集合中的对象转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42300291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com