jackson的ObjectMapper在转换对象为json字符串时,如果对象内包含子类(或存在一对多的关联关系)会出现死循环
org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->//
//原因:这里两个实体类: Album(相册) 和 photo(照片) 是一对多双向关联
//死循环原因: JSON无法对Album的photos属性进去JSON转换
//
解决方法在多方类头部使用
org.codehaus.jackson.annotate.JsonIgnoreProperties //注解
//
一方
@JsonIgnoreProperties(value={"photos"})
@Entity
@SuppressWarnings("serial")
@JsonIgnoreProperties(value={"photos"})
public class Album implements java.io.Serializable {
分享到:
相关推荐
它提供了高效、灵活且强大的JSON处理能力,包括将Java对象转换为JSON字符串(序列化)和从JSON字符串反向构建Java对象(反序列化)。在Spring MVC中,Jackson库通常通过配置可以无缝集成,使得Controller方法可以...
例如,在将 JSON 字符串转换为 Map 时,如果 JSON 中包含一个非常大的数字,例如 12345678901234567890,这个数字在 Java 中可能会被表示为科学计数法的形式,例如 1.2345678901234567E22。这可能会导致数据的精度...
`testToJson()`测试方法展示了如何将Java对象序列化为JSON字符串,而`testFromJson()`方法则演示了如何将JSON字符串反序列化回Java对象。这两个方法都利用了`ObjectMapper`的`writeValueAsString()`和`readValue()`...
例如,你可以轻松地将一个Java实体类转换为JSON字符串,或者将JSON字符串解析为实体类实例。 3. **jackson-annotations**:这个模块包含了一系列的注解,用于配置序列化和反序列化的行为。例如,`@JsonIgnore`用于...
通过 ObjectMapper,我们可以方便地将Java对象序列化为JSON字符串,或者将JSON字符串反序列化为Java对象。这对于在Spring MVC中处理HTTP请求和响应非常有用,因为你可以轻松地将模型对象转换为JSON,然后返回给...
通过`writeValueAsString()`方法,我们可以将`User`对象转换成JSON字符串;通过`readValue()`方法,我们可以将JSON字符串还原为`User`对象。Jackson还提供了许多高级特性,如类型绑定、自定义序列化和反序列化逻辑、...
有了 Java Bean 的定义后,我们可以利用 Fastjson 库将 JSON 字符串转换为对应的 Java Bean 对象。 ##### 示例代码 假设我们有一个 JSON 字符串: ```json { "tableStrategy": "test", "indexName": "example_...
1. **序列化(Serialization)**:将Java对象转换为JSON字符串。这允许应用程序将数据结构输出为可读的JSON格式,便于在网络上传输或存储。 2. **反序列化(Deserialization)**:将JSON字符串转换回Java对象。这...
Spring MVC 默认使用 Jackson 的 ObjectMapper 类来进行转换工作,而 ObjectMapper 在转换时默认情况下,如果在目标类中找不到 JSON 字符串中的属性就会报错。 为了解决这个问题,我们可以采取两种方法: 1. 在...
通过`readValue()`和`writeValueAsString()`等方法,开发者可以方便地进行对象与JSON字符串之间的相互转换。 3. `JsonNode`:这个接口表示JSON结构的抽象节点,可以代表任何JSON数据类型,包括对象、数组、值(字符...
在提供的代码片段中,定义了一个名为`JsonUtils`的工具类,这个类包含了一些静态方法,用于实现JSON字符串与Java对象的转换。以下是对这些方法的详细解释: 1. `fromJson(String jsonAsString, Class<T> pojoClass)...
使用`@RequestMapping`注解指定请求的URL和方法类型,`@RequestBody`用于将JSON字符串自动转换为Java对象,而`@ResponseBody`则表示方法的返回值应被转换为JSON并发送回前端。下面是一个简单的Controller示例: ```...
现在,我们可以使用`Jackson`或`Fastjson`库将JSON字符串转换为`ESMetaDataInfoIndex`对象。下面是使用`Jackson`进行转换的示例: ```java import org.codehaus.jackson.map.ObjectMapper; public class ...
在Spring MVC框架中,处理JSON数据时,日期(Date)对象通常需要被转换为字符串,以便前端能够正确解析和展示。默认情况下,Spring MVC可能会将日期转换为毫秒时间戳,这可能导致前端显示一串数字,而非易于阅读的...
解决方法是在项目中添加`jackson-core-asl`和`jackson-mapper-asl`两个包,这两个包是Jackson JSON处理库的一部分,能够帮助将Java对象转换成JSON字符串或者从JSON字符串解析成Java对象。 ```xml <!-- 添加Jackson...
同样,我们也可以使用Jackson库来反序列化JSON字符串为Java对象。 ```java ObjectMapper mapper = new ObjectMapper(); Object object = mapper.readValue(json, Object.class); ``` 小结 @ResponseBody和@Request...
ObjectMapper提供了writeValue方法,该方法可以将Java对象转换为JSON格式的字符串,进而写入到HttpServletResponse对象中,实现数据的响应。 本文中提到的BookController和UserController分别演示了如何使用Spring ...
8. **Jackson(com.springsource.org.codehaus.jackson.mapper-1.4.2.jar)**:Jackson是一个高性能的JSON处理器,用于序列化和反序列化Java对象。Spring框架使用Jackson进行JSON数据交换,尤其是在RESTful服务中。 ...