json 時區問題


 

使用postman 測試時,返回的數據少了8小時。

在調試中,測試數據是正確的,包括接口返回也是正確的。

很明顯在轉json時出了問題。

 

先說一下,不要使用jackson來作為json組件。

先說一下,不要使用jackson來作為json組件。

先說一下,不要使用jackson來作為json組件。

(文末,我會說明)

 

解決方案:

使用了  fastjson

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

 

進行如下配置(不要的,自己刪除)

package com.tenyears.common.config;
 
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
 
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @description :
 * @auther Tyler
 * @date 2021/8/6
 */
@Configuration
public class FastJSONConfig {
    @Bean
    public HttpMessageConverters httpMessageConverters() {
        HttpMessageConverter<?> fastjson = fastJsonHttpMessageConverter();
        return new HttpMessageConverters(fastjson);
    }
 
    @Bean
    public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        FastJsonHttpMessageConverter messageConverter = new FastJsonHttpMessageConverter();
        //set MediaTypes
        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        messageConverter.setSupportedMediaTypes(supportedMediaTypes);
 
        //fastJsonConfig
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //時區
        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.QuoteFieldNames, // 雙引號
                SerializerFeature.WriteMapNullValue, // 輸入空值字段
                SerializerFeature.WriteEnumUsingToString, // 枚舉輸出STRING
                SerializerFeature.WriteNullBooleanAsFalse, // 布爾類型如果為null輸出false
                SerializerFeature.WriteNullListAsEmpty, // List字段如果為null輸出為[]
                //SerializerFeature.WriteNullNumberAsZero, // number類型如果為null輸出0
                //SerializerFeature.WriteNullStringAsEmpty, // 字符串類型如果為null輸出""
                SerializerFeature.SortField, // 按字段名稱排序后進行輸出
                SerializerFeature.WriteDateUseDateFormat); // 設置日期格式
 
        //SerializeConfig
        SerializeConfig config =new SerializeConfig();
        //Long -> String ,前端無法接收Long
        config.put(Long.class , ToStringSerializer.instance);
        config.put(Long.TYPE , ToStringSerializer.instance);
        //BigInteger -> String ,前端無法接收BigInteger
        config.put(BigInteger.class , ToStringSerializer.instance);
        fastJsonConfig.setSerializeConfig(config);
 
        messageConverter.setFastJsonConfig(fastJsonConfig);
        return messageConverter;
    }
}

 

最后說一下

為什么不用jackson?

一,配置過jackson的時區問題。

jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: Asia/Shanghai

 

二,問題

配置jackson后,

postman無法傳入 短日期格式  2021-02-03。

必須要  2021-02-03 00:00:00,否則直接bad request!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM