【发布时间】:2016-05-27 11:31:04
【问题描述】:
我有实体用户
public class Users implements Serializable {
private Long id;
private String password;
private String email;
private Boolean enabled;
private String name;
private String lastname;
private String userRole;
private String secondName;
private String telephone;
private String automobile;
private List<Claim> claims;
private List<Orders> ordersList;
// getters and setters
}
用户有许多索赔和订单。而我的控制器方法是这样的
@RequestMapping(value = "get", method = GET)
public
@ResponseBody
Users get() {
return ((CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUserInfo();
}
然后我尝试获取用户,我收到此错误 在
com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:694)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
//etc
我所有的实体都实现了 Serializible 接口。 但是如果我尝试这样的事情
@RequestMapping(value = "get", method = GET)
public
@ResponseBody
Users get() {
Users users = ((CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUserInfo();
users.setClaims(null);
users.setOrdersList(null);
return users;
}
它有效。 我得到这样的json字符串
{
"id" : 7,
"password" : "$2a$11$IDMDPHQNiNEs9NP282zrGe3rn8la5WL8aR.RY3IFFa8y0NJc9ubdS",
"email" : "serendipity@mail.ru",
"enabled" : true,
"name" : "Alex",
"lastname" : "Zhukov",
"userRole" : "ROLE_USER",
"secondName" : null,
"telephone" : "89274455166",
"automobile" : "MercedesW222",
"claims" : null,
"ordersList" : null
}
我做错了什么? 我的 pom.xml
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>RELEASE</version>
</dependency>
更新 索赔和订单实体
public class Orders implements Serializable {
private Long id;
private String status;
private String address;
private Timestamp fDate;
private Integer sum;
private Users users;
private List<OrdersProducts> ordersProductsList;
//getters and setters
}
public class Claim implements Serializable {
private Long id;
private Timestamp fDate;
private String reason;
private String status;
private String response;
private Users user;
private Integer sum;
//getters and setters
}
显然,他进入了深度递归。用户有很多索赔和订单,订单和索赔属于用户。 以此类推到无穷大。 但是话又说回来,在这种情况下,我必须将索赔和订单设置为空吗?
【问题讨论】:
-
您能否分享您的索赔和订单实体
-
我认为问题出在 Claim 和 Orders 对象内部
-
你已经发布了堆栈跟踪的一部分,你能发布完整的东西,尤其是错误消息本身吗?
-
Serializable 表示使用字节码;它与 JSON 无关。杰克逊非常健壮。在组合它们之前尝试读取和写入每个对象。可能是时间戳有问题。
标签: java json spring maven jackson