fastjson将对象和json互转,@JSONField的使用及不生效
<!-- 9.fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
jsonArray.toJsonString(object)默认首字母小写,但是有些时候,不想要这种默认机制,可以在实体类上加上@JSONField
package com.hainei.pojo.bo.toZonesData; import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; /** * Created with IntelliJ IDEA. * User:wq * Date:2020/12/19 * Time: 15:19 * Description: 10.1作业人员在岗在位数据 */ @Data public class ZonesWorkPeoleBO { @JSONField(name = "QYBM") private String QYBM; @JSONField(name = "GWID") private String GWID; @JSONField(name = "GWMC") private String GWMC; @JSONField(name = "GWDD") private String GWDD; @JSONField(name = "GWSJ") private String GWSJ; @JSONField(name = "RYBMA") private String RYBMA; @JSONField(name = "RYXM") private String RYXM; @JSONField(name = "ZGRYSL") private String ZGRYSL; @JSONField(name = "RCSJ") private String RCSJ; @JSONField(name = "LCSJ") private String LCSJ; @JSONField(name = "STATUS") private Integer STATUS; private String createDate ; private String createBy; private String updateDate ; private String updateBy; private Integer Version; private Integer isHistory; private Integer Sync; private String syncDate; }
光这样还不行,要替换springBoot的默认json转化机制,需要在启动类App中注入一个bean。这样才能生效。
@Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter<?> converter = fastConverter; return new HttpMessageConverters(converter); }
将json和List<T>互转
package com.hainei.common.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import java.util.List; /** * Created by Administrator on 2018\10\30 0030. */ public class JsonListUtil { /** * List<T> 转 json 保存到数据库 */ public static <T> String listToJson(List<T> ts) { String jsons = JSON.toJSONString(ts); return jsons; } /** * json 转 List<T> */ public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) { @SuppressWarnings("unchecked") List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz); return ts; } }
属性首字母大写传给前端后自动转成了小写。解决思路网上有三种:
1) 如果没有使用fastjson(阿里巴巴出品),使用@JsonProperty("XXXX")的注解方式可以解决问题,XXXX就是转换成Json的属性名,但注意,只有放在getter上才是有效的,直接在属性上加没效果.(这说明spring 默认的jackson类库处理是基于访问器。
2)如果使用了fastjson,就用@JSONField(name="XXXXX")注解方式进行,这个可以放在属性上。不过放在getter,setter上更好。
3)如果同时有两个存在,一般都是fastjson起效果,不过具体情况可以试下,我遇到的就是fastjson起效。当然要强制失效fastjson,就需要在Application类上加注解:@EnableWebMvc.
测试后通过第一种方法解决。
java实现数组集合转成json格式
一、下载fastjson.jar
http://repo1.maven.org/maven2/com/alibaba/fastjson
二、项目添加jar包
Java Build Path
三、导入类
import com.alibaba.fastjson.JSON;
四、转换(这里以集合为例)
List<List<String>> listOut = new ArrayList<>(); String jsonList = JSON.toJSONString(listOut);
json 和 数组的相互转换
package com.hainei.common.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import java.util.List; /** * Created by Administrator on 2018\10\30 0030. */ public class JsonListUtil { /** * List<T> 转 json 保存到数据库 */ public static <T> String listToJson(List<T> ts) { String jsons = JSON.toJSONString(ts); return jsons; } /** * json 转 List<T> */ public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) { @SuppressWarnings("unchecked") List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz); return ts; } }
阿里巴巴jsonArray将对象互转的方法
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; //json为string类型的json字符串 //json字符串转json对象 JSONObject jsonobject=JSONObject.parseObject(json); //json字符串转换成List(Javabean)对象 List<YpzsSaleInfo> saleInfoList = (List<YpzsSaleInfo>)JSONObject.parseArray(json,YpzsSaleInfo.class); //json字符串转换成Javabean对象 JSONObject.parseObject(json,YpzsSaleInfo.class); //获取json对象里获取值,String类型参数 String token=jsonobject.getString("key值"); //数组类型 JSONArray dataJsonArray =jsonobject.getJSONArray("SaleInfo"); //对象类型 JSONObject jsonobject1=jsonobject.getJSONObject("key值"); //Javabean对象(可以是任何对象比如jsonArray),转换成String类型的JSON字符串 JSONObject.toJSONString(YpzsSaleInfo.class);//Javabean对象 //json对象转javabean JSONObject jsonBean3=jsonobject.getJSONObject("小明"); YpzsSaleInfo parseBean=JSONObject.toJavaObject(jsonBean3, YpzsSaleInfo.class); //jsonArray增加值 JSONArray jsonArray=new JSONArray(); jsonArray.add(jsonBean3); //存值用put jsonobject.put("messageId",""); jsonobject.put("messageId",dataJsonArray); jsonobject.put("messageId",new YpzsSaleInfo());//实体 /***map的转换**/ Map<String,String> mp =JSONObject.parseObject(jsonBean3.toJSONString(), Map.class); List<Map<String,String>> listmap =JSONObject.parseObject(jsonArray.toString(), List.class); public Object jwscqyInfoAdd(@RequestBody JSONObject params) { String qyzcQyxxbString=params.getJSONArray("sjsccsList").toJSONString(); List<QyzcQysjsccsb> list=JSONObject.parseArray(qyzcQyxxbString,QyzcQysjsccsb.class); QyzcQyxxb qyzcQyxxb = JSONObject.toJavaObject((JSONObject)params.get("scqyxx"), QyzcQyxxb.class);
https://www.cnblogs.com/h-java/p/10220737.html
https://www.liangzl.com/get-article-detail-9315.html
fastJson对对象进行操作时,调用的get、set方法
fasetJson转对象时同样要调用get、set方法,但是调用的get、set方法,对象字段首字母小写 例如 getspeed()、setspeed(),(且使用fastjson转对象后,字段都是首字母小写,需要加@jsonFiled) 而不是getSpeed()、setSpeed()。
使用fastjson将字符串转换为对象时,出现对象部分字段属性丢失的问题。