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;
}
View Code

 

光这样还不行,要替换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;
    }
}
View Code

 

属性首字母大写传给前端后自动转成了小写。解决思路网上有三种:

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;
    }
}
View Code

 

 阿里巴巴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将字符串转换为对象时,出现对象部分字段属性丢失的问题。

https://blog.csdn.net/qq912098812/article/details/109049919

posted @ 2020-12-15 20:22  wq9  阅读(6212)  评论(0编辑  收藏  举报