iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springboot2中使用@JsonFormat注解不生效怎么解决
  • 222
分享到

springboot2中使用@JsonFormat注解不生效怎么解决

2023-06-29 05:06:22 222人浏览 八月长安
摘要

这篇“SpringBoot2中使用@JSONFORMat注解不生效怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sp

这篇“SpringBoot2中使用@JSONFORMat注解不生效怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot2中使用@jsonFormat注解不生效怎么解决”文章吧。

    使用@JsonFormat注解不生效

    百度了不少解决方式,有让用@JsonField,也有让把fastjson去掉的,也有加很多配置的,但是都没用。

    本次使用的版本号

    springboot2.2.2 ;

    fastjson 1.1.26

    <jackson-mapper-asl.version>1.9.10</jackson-mapper-asl.version>     
    <jackson-core.version>2.10.3</jackson-core.version>

    第三点以及相关的依赖可能不需要,加上也没关系

    pom文件中的依赖:

    <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>${fastjson.version}</version>        </dependency><dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-mapper-asl</artifactId>            <version>${jackson-mapper-asl.version}</version>        </dependency>         <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>            <version>${jackson-core.version}</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>            <version>${jackson-core.version}</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-annotations</artifactId>            <version>${jackson-core.version}</version>        </dependency>

    解决方式

    第一步新建一个转换类 用于自定义Jackson反序列化日期类型时应用的类型转换器,一般用于@RequestBody接受参数时使用

    import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.DeserializationContext;import com.fasterxml.jackson.databind.JsonDeserializer;import org.apache.commons.lang3.StringUtils;import org.apache.commons.lang3.time.DateUtils; import java.io.IOException;import java.text.ParseException;import java.util.Date; public class DateJacksonConverter extends JsonDeserializer<Date> {    //此处尤为重要,请查找自己控制台报错的日期格式化类型是啥样的    //我的是2020-04-29T16:23:44.999Z 所以我在下面的数组中添加了 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 格式;如果下面数组中没有你要的格式化类型,其他的可自行根据自己的情况去添加即可    private static String[] pattern =            new String[]{"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.S",                    "yyyy.MM.dd", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss.S",                    "yyyy/MM/dd", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss.S", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"};     @Override    public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {         Date targetDate = null;        String originDate = p.getText();        if (StringUtils.isNotEmpty(originDate)) {            try {                long longDate = Long.valueOf(originDate.trim());                targetDate = new Date(longDate);            } catch (NumberFormatException e) {                try {                    targetDate = DateUtils.parseDate(originDate, DateJacksonConverter.pattern);                } catch (ParseException pe) {                    throw new IOException(String.format(                            "'%s' can not convert to type 'java.util.Date',just support timestamp(type of long) and following date format(%s)",                            originDate,                            StringUtils.join(pattern, ",")));                }            }        }         return targetDate;    }     @Override    public Class<?> handledType() {        return Date.class;    }}

    创建好上边的类之后,如果不想继续,则可以在实体对象属性上加注解就完全可以了。

    导入的包路径为:

    import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
    @JsonDeserialize(using=DateJacksonConverter.class)private Date startDate;

    如果不想去让实体类加这个注解,可以在写一个公共配置,如下:

    import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.Http.converter.json.Jackson2ObjectMapperFactoryBean;import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import com.fasterxml.jackson.databind.ObjectMapper;import com.fx.base.serializer.DateJacksonConverter; @Configurationpublic class ConverterConfig {    @Bean    public DateJacksonConverter dateJacksonConverter() {        return new DateJacksonConverter();    }     @Bean    public Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean(            @Autowired                    DateJacksonConverter dateJacksonConverter) {        Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean = new Jackson2ObjectMapperFactoryBean();         jackson2ObjectMapperFactoryBean.setDeserializers(dateJacksonConverter);        return jackson2ObjectMapperFactoryBean;    }     @Bean    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(            @Autowired                    ObjectMapper objectMapper) {        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter =                new MappingJackson2HttpMessageConverter();        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);        return mappingJackson2HttpMessageConverter;    }}

    此时就不必再每个实体类属性上加注解了。

    @JsonFormat和@DateTimeFormat的作用

    • @DatetimeFormat是将String转换成Date,一般前台给后台传值时用

        import org.springframework.format.annotation.DateTimeFormat;        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private Date birth;
    • @JsonFormat(pattern=”yyyy-MM-dd”) 将Date转换成String 一般后台传值给前台时

        import com.fasterxml.jackson.annotation.JsonFormat;        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private Date birth;

    注意:

    @JsonFormat不仅可以完成后台到前台参数传递的类型转换,还可以实现前台到后台类型转换。

    当content-type为application/json时,优先使用@JsonFormat的pattern进行类型转换。而不会使用@DateTimeFormat进行类型转换。

    @JsonFormat注解的作用就是完成json字符串到java对象的转换工作,与参数传递的方向无关。

    以上就是关于“springboot2中使用@JsonFormat注解不生效怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: springboot2中使用@JsonFormat注解不生效怎么解决

    本文链接: https://www.lsjlt.com/news/322897.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • springboot2中使用@JsonFormat注解不生效怎么解决
      这篇“springboot2中使用@JsonFormat注解不生效怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sp...
      99+
      2023-06-29
    • springboot2中使用@JsonFormat注解不生效的解决
      目录使用@JsonFormat注解不生效本次使用的版本号解决方式@JsonFormat和@DateTimeFormat的作用使用@JsonFormat注解不生效 百度了不少解决方式,...
      99+
      2024-04-02
    • java SpringBoot注解@Async不生效怎么解决
      这篇“java SpringBoot注解@Async不生效怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j...
      99+
      2023-06-29
    • Jackson反序列化@JsonFormat 不生效的解决方案
      今天在线上发现一个问题,在使用Jackson进行时间的反序列化时,配置的 @JsonFormat 没有生效 查看源码发现,Jackson在反序列化时间时,会判断json字段值类型,如...
      99+
      2024-04-02
    • idea中autowired注解不生效如何解决
      当使用@Autowired注解时,如果发现注入不生效,可以尝试以下几种解决方案:1. 确保被注入的对象被正确声明为一个Bean。在被...
      99+
      2023-09-27
      idea
    • scss使用mixin不生效怎么解决
      这篇文章主要介绍“scss使用mixin不生效怎么解决”,在日常操作中,相信很多人在scss使用mixin不生效怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”scss使用mixin不生效怎么解决”的疑...
      99+
      2023-07-04
    • @valid注解不生效怎么办
      这篇文章主要为大家展示了“@valid注解不生效怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“@valid注解不生效怎么办”这篇文章吧。一、背景在进行一次Controller层单测时,方法...
      99+
      2023-06-15
    • SpringBoot2底层注解@Import怎么使用
      这篇文章主要介绍“SpringBoot2底层注解@Import怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot2底层注解@Import怎么使用”文章能帮助大家解决问题。@I...
      99+
      2023-06-30
    • crontab不生效怎么解决
      要解决crontab不生效的问题,可以采取以下几个步骤:1. 检查crontab文件路径:确保你正在编辑正确的crontab文件。默...
      99+
      2023-08-14
      crontab
    • scss中使用mixin不生效如何解决
      scss中使用mixin不生效如何解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mixin方法:浏览器无法编译:以前旧版sass是支持上面写法,现在新版后不支持,传入变...
      99+
      2023-06-08
    • jQuery的scrollTop()方法使用不生效怎么解决
      如果 jQuery 的 scrollTop() 方法无效,可能有以下原因和解决方法:1. 元素没有设置固定的高度:scrollTop...
      99+
      2023-09-05
      jQuery
    • Java pom引用不生效怎么解决
      如果Java项目中的pom引用不生效,可能是由于以下几个原因导致的: 依赖项版本不匹配:确保项目中引用的依赖项版本与pom文件中定...
      99+
      2024-04-02
    • 怎么解决php extension不生效
      本篇内容介绍了“怎么解决php extension不生效”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php extension不生效的解决...
      99+
      2023-06-25
    • SpringBoot2底层注解@Conditional和@ImportResource怎么使用
      这篇“SpringBoot2底层注解@Conditional和@ImportResource怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下...
      99+
      2023-06-30
    • java SpringBoot注解@Async不生效的解决方法
      目录问题描述:解决方案:总结:SpringBoot 注解@Async不生效的解决方法 问题描述: 这里虽然加了@EnableAsync和@Async,但是异步请求依然没有生效 解决...
      99+
      2024-04-02
    • 如何解决spring boot项目使用@JsonFormat失效问题
      这篇文章给大家分享的是有关如何解决spring boot项目使用@JsonFormat失效问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用@JsonFormat失效在实体类定义时间格式原因:项目中配置了fa...
      99+
      2023-06-25
    • vue在mounted中window.onresize不生效怎么解决
      这篇文章主要介绍“vue在mounted中window.onresize不生效怎么解决”,在日常操作中,相信很多人在vue在mounted中window.onresize不生效怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
      99+
      2023-06-30
    • spring boot项目使用@JsonFormat失效问题的解决
      目录使用@JsonFormat失效原因:项目中配置了fastjson包使用@JsonFormat注解踩过的坑错误原因解决方案使用@JsonFormat失效 在实体类定义时间格式 原...
      99+
      2024-04-02
    • vue3中update:modelValue的使用与不生效问题解决
      目录v-model中update:modelValue写法:使用:vue3子组件update:modelValue不生效问题总结v-model中update:modelVa...
      99+
      2024-04-02
    • Vue设置keepAlive不生效怎么解决
      本篇内容主要讲解“Vue设置keepAlive不生效怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue设置keepAlive不生效怎么解决”吧!设置keepAlive不生效如演示,Vu...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作