springmvc에서 FastJson 순환 인용 문제 해결

2974 단어 springmvcfastjson
먼저 예를 살펴보겠습니다.

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> 
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기