springmvc에서 FastJson 순환 인용 문제 해결
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class Test {
public static void main(String[] args) {
Map<String, Student> maps = new HashMap<String, Student>();
Student s1 = new Student("s1", 16);
maps.put("s1", s1);
maps.put("s2", s1);
byte[] bytes = JSON.toJSONBytes(maps);
System.out.println(new String(bytes));
}
}
출력:
{"s1":{"age":16,"name":"s1"},"s2":{"$ref":"$.s1"}}
보시다시피 이 json은 전단에 보내면 사용할 수 없습니다. 다행히도 FastJson이 해결 방법을 제공했습니다. 해결 방법은 순환 인용 검사를 사용하지 않기 위한 것입니다. 코드는 다음과 같습니다.
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class Test {
public static void main(String[] args) {
Map<String, Student> maps = new HashMap<String, Student>();
Student s1 = new Student("s1", 16);
maps.put("s1", s1);
maps.put("s2", s1);
SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect;
byte[] bytes = JSON.toJSONBytes(maps,feature);
System.out.println(new String(bytes));
}
}
출력은 다음과 같습니다.
{"s1":{"age":16,"name":"s1"},"s2":{"age":16,"name":"s1"}}
문제는 만약spring mvc에서 사용할 때 Serializer Feature를 MessageConverter에 주입해야 한다는 것입니다. FastJsonHttpMessageConverter그러나 Serializer Feature는 하나의 enum 유형이고 또한array이다. 대부분의 사람들이 이것에 대해 익숙하지 않은 것을 고려하여 코드를 직접 올렸다.
<bean id="jsonConverter"
class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json;charset=UTF-8"/>
<property name="features">
<array value-type="com.alibaba.fastjson.serializer.SerializerFeature">
<value>DisableCircularReferenceDetect</value>
</array>
</property>
</bean>
<bean id="DisableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"></property>
</bean>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.