Fastjson转义
在使用fastjson作为json格式化工具时,
如果controller使用的是@RestController注解,并配置了fastjson消息转换器。
@Configuration
public class FeignMessageConverterConfig {
@Bean
public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
//1.需要定义一个convert转换消息的对象;
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//2.添加fastJson的配置信息,比如:是否要格式化返回的json数据;
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.QuoteFieldNames,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteDateUseDateFormat);
//关闭转义字符
fastJsonConfig.setFeatures(Feature.DisableSpecialKeyDetect);
//3处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON);
//4.在convert中添加配置信息.
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
return fastJsonHttpMessageConverter;
}
}@Slf4j
@RestController
public class DYDataFormController {
/**
* 地区编码查询(省)
*
* @param request
* @return
*/
@RequestMapping(value = "/dy/queryProvince")
public String queryProvince(HttpServletRequest request) {
log.info("queryProvince。start...");
RSP rsp = new RSP();
try {
String resultStr = (String) dataFormFeignApi.queryArea("1",null,null);
RSP result = JSONObject.parseObject(JSON.parse(resultStr).toString(),RSP.class);
return result;
} catch (ErrorException e) {
log.error("queryProvince失败:[{}]->[{}]", e.getCode(), e.getMsg());
rsp.rsp(e.getCode(), e.getMsg());
return rsp;
} catch (Exception e) {
log.error("queryProvince失败:[{}]", e.getMessage());
rsp.fail(e.getMessage());
return rsp;
}
}
}如果返回的是String类型, fastjson会进行序列化转义。
正常的json格式变成了如下,多了\转义符
{\"HEAD\":{\"MSG\":\"操作成功\",\"CODE\":\"000\"},\"BODY\":[{}]}两种处理方式
第一种,修改返回类型,由String改为Object
String resultStr = (String) dataFormFeignApi.queryArea("1",null,null);
//JSON.parse(resultStr)会解析转义字符
RSP result = JSONObject.parseObject(JSON.parse(resultStr).toString(),RSP.class);第二种,在接收端进行序列化处理
/**
* 地区编码查询(省)
* 返回值改为Object,就不会进行转义了
* @param request
* @return
*/
@RequestMapping(value = "/dy/queryProvince")
public Object queryProvince(HttpServletRequest request) {
log.info("queryProvince。start...");
RSP rsp = new RSP();
try {
String resultStr = (String) dataFormFeignApi.queryArea("1",null,null);
RSP result = JSONObject.parseObject(JSON.parse(resultStr).toString(),RSP.class);
return result;
} catch (ErrorException e) {
log.error("queryProvince失败:[{}]->[{}]", e.getCode(), e.getMsg());
rsp.rsp(e.getCode(), e.getMsg());
return rsp;
} catch (Exception e) {
log.error("queryProvince失败:[{}]", e.getMessage());
rsp.fail(e.getMessage());
return rsp;
}
}
本文链接:
/archives/1753536406609
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
刘同学的小站!
喜欢就支持一下吧