json和jackson、fastjson2转化

jackson

Spring Boot默认使用的JSON处理库是Jackson。Jackson是一个流行的Java库,用于序列化Java对象为JSON格式,以及将JSON字符串反序列化为Java对象。

实体类

@Data
publicclassUser{

/*
*JsonIgnore会影响java对象转json【json中没有id字段】、json转java对象【java对象的id属性为null】
*/
@JsonIgnore
privateLongid;

/*
*JsonProperty标识对应关系
*/
@JsonProperty("username")
privateStringname;

privateIntegerage;

/*
*JsonFormat会影响java对象转json【json中brithDay字段格式化为:yyyy-MM-ddHH:mm;java对象的brithDay属性类型是Date】
*/
@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-ddHH:mm")
privateDatebrithDay;
}

测试代码

@PostConstruct
publicvoidtestJson()throwsJsonProcessingException{

Useruser=newUser();
user.setId(1L);
user.setName("jei");
user.setAge(25);
user.setBrithDay(newDate());

ObjectMapperobjectMapper=newObjectMapper();
Stringjson=objectMapper.writeValueAsString(user);
System.out.println(json);

StringjsonStr="{\"id\":1,\"username\":\"jei\",\"age\":25,\"brithDay\":\"2025-01-1415:18\"}";
UseruserValue=objectMapper.readValue(jsonStr,User.class);
System.out.println(userValue);

}

结果

fastjson2

​ Fastjson2并不是在Fastjson1的基础上进行简单的升级,而是进行了重新的编写和优化。这意味着Fastjson2在代码结构、算法实现和性能优化方面都进行了全面的改进。

将jackson换成fastjson2

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>

        <!-- 去掉Jackson依赖,用fastjson2 -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-json</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.alibaba.fastjson2</groupId>
        <artifactId>fastjson2</artifactId>
        <version>2.0.21</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba.fastjson2</groupId>
        <artifactId>fastjson2-extension</artifactId>
        <version>2.0.21</version>
    </dependency>

</dependencies>

config

import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.support.config.FastJsonConfig;
import com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

@Configuration
public class FastjsonConfig implements WebMvcConfigurer {

    /*
     * 配置fastjson输出格式
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 1. 配置fastjson
        FastJsonConfig config = new FastJsonConfig();

        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        config.setCharset(StandardCharsets.UTF_8);
        config.setWriterFeatures(
                JSONWriter.Feature.WriteNullListAsEmpty,
                //json格式化
                JSONWriter.Feature.PrettyFormat,
                //输出map中value为null的数据
                JSONWriter.Feature.WriteMapNullValue,
                //输出boolean 为 false
                JSONWriter.Feature.WriteNullBooleanAsFalse,
                //输出list 为 []
                JSONWriter.Feature.WriteNullListAsEmpty,
                //输出number 为 0
                JSONWriter.Feature.WriteNullNumberAsZero,
                //输出字符串 为 ""
                JSONWriter.Feature.WriteNullStringAsEmpty,
                //对map进行排序
                JSONWriter.Feature.MapSortField
        );

        // 2. 添加fastjson转换器
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        List<MediaType> supportedMediaTypes = new ArrayList<>();

        // 3. 添加支持的媒体类型
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XML);
        supportedMediaTypes.add(MediaType.IMAGE_GIF);
        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
        supportedMediaTypes.add(MediaType.IMAGE_PNG);
        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(MediaType.TEXT_XML);

        converter.setSupportedMediaTypes(supportedMediaTypes);

        //4 将convert添加到converters
        converter.setFastJsonConfig(config);
        converters.add(0, converter);
    }
}

实体类

@Data
public class User {

    /*
     * java对象转json:json中没有id字段
     * json转java对象不受影响
     */
    @JSONField(serialize = false)
    private Long id;

    /*
     * name标识对应关系
     */
    @JSONField(name = "username")
    private String name;

    private Integer age;

    /*
     * java对象转json:会将brithDay属性转成格式化为:yyyy-MM-dd HH:mm:ss
     * json转java对象:brithDay强制要求是"yyyy-MM-dd HH:mm:ss"的字符串
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date brithDay;
}

测试代码

@PostConstruct
public void testFastJson2() {

    User user = new User();
    user.setId(1L);
    user.setName("jei");
    user.setAge(25);
    user.setBrithDay(new Date());

    String json = JSONObject.toJSONString(user);
    System.out.println(json);

    String jsonStr = "{\"age\":25,\"brithDay\":\"2025-01-14 16:05:11\",\"id\":1,\"username\":\"jei\"}";
    User userValue = JSONObject.parseObject(jsonStr, User.class);
    System.out.println(userValue);

}

结果

posted @ 2025-01-14 16:33  南翔技校毕业后  阅读(192)  评论(0)    收藏  举报