0%

Json数据问题

FastJson使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@SpringBootApplication
@MapperScan("tech.xixing.huaxuemall.mapper")
public class HuaxuemallApplication {

public static void main(String[] args) {
SpringApplication.run(HuaxuemallApplication.class, args);
}

@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
//1.需要定义一个convert转换消息的对象;
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//2:添加fastJson的配置信息;
FastJsonConfig fastJsonConfig = new FastJsonConfig();
/**
* TODO 第一个SerializerFeature.PrettyFormat可以省略,毕竟这会造成额外的内存消耗和流量,第二个是用来指定当属性值为null是是否输出:pro:null
      * SerializerFeature.SkipTransientField
*/
fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
//3处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//4.在convert中添加配置信息.
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastJsonHttpMessageConverter;
return new HttpMessageConverters(converter);
}
}

fastJson的循环/重复引用问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{
"data": [
{
"brand": {
"brandName": "罗恩",
"categories": "1|2|3|",
"descs": null,
"id": 1,
"picture": "https://manager.chem-mall.com/files/brands_mng_logo_1545016241_8626.jpg",
"sorted": 1,
"titleId": null
},
"productCategoryList": [
{
"casNo": "7647-14-5",
"categoryId": 12,
"chemicalFormula": "NaCl",
"chineseName": "氯化钠",
"englishName": "NaCl",
"id": 1,
"picture": "https://www.chem-mall.com/assets/proimgs/7647-14-5.jpg?1596848355",
"sorted": 1
},
{
"casNo": null,
"categoryId": 12,
"chemicalFormula": null,
"chineseName": "11-马来酰亚胺基十一酸,97%",
"englishName": null,
"id": 2,
"picture": "https://www.chem-mall.com/assets/proimgs/57079-01-3.jpg?1596933930",
"sorted": 1
}
]
},
{
"brand": {
"brandName": "罗恩test",
"categories": "1|2|3|",
"descs": null,
"id": 4,
"picture": "https://manager.chem-mall.com/files/brands_mng_logo_1545016241_8626.jpg",
"sorted": 1,
"titleId": null
},
"productCategoryList": [
{
"$ref": "$.data[0].productCategoryList[0]"
},
{
"$ref": "$.data[0].productCategoryList[1]"
}
]
}
],
"msg": null,
"status": 0
}

出现”$ref”: “$.data[0].productCategoryList[0]”

如果是重复引用可以new一个新对象来解决

example:

1
2
3
4
5
//为了防止转json出现引用问题
ProductCategory productCategory1=new ProductCategory();
BeanUtils.copyProperties(productCategory,productCategory1);

productCategories.add(productCategory1);

如果是循环引用:

在配置中加上这句,不过已经被废弃了

1
fastJsonHttpMessageConverter.setFeatures(SerializerFeature.DisableCircularReferenceDetect);

可以替换成以下:

1
2
3
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);