org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.bonc.ds.dataset.bean.DataSourceDef["dataSetDef"]->org.hibernate.collection.internal.PersistentBag[0]->com.bonc.ds.dataset.bean.DataSetDef["dataSourceDef"]->com.bonc.ds.dataset.bean.DataSourceDef["dataSetDef"]->org.hibernate.collection.internal.PersistentBag[0]->com.bonc.ds.dataset.bean.DataSetDef["dataSourceDef"]->com.bonc.ds.dataset.bean.DataSourceDef["dataSetDef"]-
……
就转换成json栈溢出
解决方式:添加,公司用的FasterXML Jackson 2.X
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
知识点:
@JsonIgnore注解用来忽略某些字段,添加后不会序列化和反序列化
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段。这个注解还可以指定要忽略的字段,例如@JsonIgnoreProperties({ “password”, “secretKey” })
@JsonProperty:使用在某个属性上,这个注解有两个作用,第一是修改返回JSON数据的时候字段属性名(key)设定成value的指定值,第二个作用是配合属性access=JsonProperty.Access.WRITE_ONLY表示属性只反序列化,直观效果就是返回的数据没有该属性。
WRITE_ONLY:仅做反序列化操作。前端拿不到这个数据
READ_ONLY:仅做序列化操作。
@JsonFormat可以帮我们完成格式转换。例如对于Date类型字段,如果不适用JsonFormat默认在rest返回的是long,如果我们使用@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”),就返回"2018-11-16 22:58:15"