当前位置: 首页 > news >正文

湖北省建设厅投标报名官方网站一键开发小程序

湖北省建设厅投标报名官方网站,一键开发小程序,建设游戏网站需要哪些设备,医疗软件公司排名背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下: spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true尝试是否关于时间的注解是否会生效,使用JsonForma和JsonFiled均失效。 常…

背景

项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下:

spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true

尝试是否关于时间的注解是否会生效,使用@JsonForma@JsonFiled均失效。

常见失效原因及解决方法

@JsonFormat是用于指定Java对象序列化为JSON字符串时的格式化方式的注解。如果@JsonFormat失效,可能是以下原因:

  1. 未正确导入Jackson库
  2. 注解位置不正确
  3. 注解参数设置错误

解决方法:

  1. 确认是否正确导入了Jackson库,可以在pom.xml文件中添加以下依赖:
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.3</version>
</dependency>

2、确认注解位置是否正确,例如:

public class User {@JsonFormat(pattern = "yyyy-MM-dd")private Date birthday;// ...
}

3、确认注解参数是否正确设置,例如:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public Date getCreatedDate() {return createdDate;
}

以上是常见的解决方法,如果还有问题可以提供更具体的错误信息进行排查。

本次问题解决

失效原因

因为项目中使用了Gson替换Jackson。
代码如下:

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import springfox.documentation.spring.web.json.Json;import java.lang.reflect.Type;public class JsonToGson implements JsonSerializer<Json> {@Overridepublic JsonElement serialize(Json json, Type type, JsonSerializationContext context) {return JsonParser.parseString(json.value());}
}
@Configuration
public class SwaggerWebConfiguration implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.removeIf(httpMessageConverter -> httpMessageConverter instanceof MappingJackson2HttpMessageConverter);converters.add(gsonHttpMessageConverters());}@Beanpublic GsonHttpMessageConverter gsonHttpMessageConverters() {Gson gson = new GsonBuilder().registerTypeAdapter(Json.class, new SpringfoxJsonToGsonAdapter()).create();GsonHttpMessageConverter gsonConverter = new GsonHttpMessageConverter(gson);return gsonConverter;}
}

解决方案一:去掉Gson转换即可。

解决方案二:重新添加MappingJackson2HttpMessageConverter的bean

@Autowired(required = false)
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);if (Objects.isNull(mappingJackson2HttpMessageConverter)) {converters.add(0, new MappingJackson2HttpMessageConverter());} else {converters.add(0, mappingJackson2HttpMessageConverter);}}

@Autowired(required = false)
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);if (Objects.isNull(mappingJackson2HttpMessageConverter)) {converters.add(0, new MappingJackson2HttpMessageConverter());} else {converters.add(0, mappingJackson2HttpMessageConverter);}
}

解析

Jackson一直是springframework默认的json库,从4.1开始,springframework支持通过配置GsonHttpMessageConverter的方式使用Gson。

Spring MVC中,一旦请求退出@Controller,它将寻找一个视图来呈现。当指定了@RequestBody@RestController时,我们会告诉Spring跳过这一步,将java对象通过model写入响应结果。Spring通过HttpMessageConverter来执行Java对象向其它类型(通常是Json)的转换,Spring默认使用的是 MappingJackson2HttpMessageConverter,所以如果希望使用Gson来执行这种转换,可用使用GsonHttpMessageConverter替换Jackson

小拓展

在Spring Boot提供了与三个JSON映射库的集成:Gson、默认库 Jackson 、JSON-B

@JsonFormat与@JSONField简介

@JsonFormat

@JsonFormat是Java中的一个Jackson注解,用于指定某个字段或属性,或整个类的JSON序列化或反序列化格式。它允许在将数据类型转换为或从JSON格式转换时自定义日期、数字、布尔值等数据类型的格式。

例如,如果您有一个Java类,其中包含一个Date字段,您希望以特定格式将其序列化为JSON,您可以使用@JsonFormat注解来指定该格式:

示例如下:Jackson在序列化或反序列化myDate字段时使用“yyyy-MM-dd”格式。

public class MyClass {@JsonFormat(pattern="yyyy-MM-dd")private Date myDate;// ...
}

@JSONField

@JSONField是阿里巴巴的fastjson库中的一个注解,用于指定Java对象属性在序列化为JSON字符串时的名称、顺序、格式等信息。例如,可以使用@JSONField(name=“username”)指定Java对象属性在序列化为JSON字符串时使用"username"作为属性名。

区别

@JsonFormat和@JSONField都是用于控制Java对象属性在序列化为JSON字符串时的格式,但是它们有一些不同之处。

@JsonFormat是Jackson库中的一个注解,用于指定Java对象属性在序列化为JSON字符串时的日期、时间、数字等格式。例如,可以使用@JsonFormat(pattern=“yyyy-MM-dd HH:mm:ss”)指定Java对象属性在序列化为JSON字符串时使用指定的日期时间格式。

@JSONField是阿里巴巴的fastjson库中的一个注解,用于指定Java对象属性在序列化为JSON字符串时的名称、顺序、格式等信息。例如,可以使用@JSONField(name=“username”)指定Java对象属性在序列化为JSON字符串时使用"username"作为属性名。

因此,虽然@JsonFormat和@JSONField都可以用于控制Java对象属性在序列化为JSON字符串时的格式,但是它们的作用范围和使用方式略有不同。

jackson自定义日期注解

依赖HttpMessageConverter默认实现如下:

jackson:MappingJackson2HttpMessageConverter;

请添加图片描述

gson:GsonHttpMessageConverter;

请添加图片描述

fastjson : FastJsonHttpMessageConverter

1、自定义转换类:

public class DateToJsonSerializer extends JsonSerializer<Date> implements ContextualSerializer {private DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public DateToJsonSerializer() {}@Overridepublic void serialize(Date arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException {if (null != arg0) {arg1.writeString(this.df.format(arg0));}}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)   {AnnotationMap annotated = property.getMember().getAllAnnotations();JsonFormat jsonFormat = annotated.get(JsonFormat.class);if (jsonFormat != null && jsonFormat.pattern() != null){df = new SimpleDateFormat(jsonFormat.pattern());}return this;}
}

2、使用

public class MyClass {@JsonSerialize(using = DateToJsonSerializer .class)private Date myDate;// ...
}

在这里插入图片描述

翩若惊鸿,婉若游龙。

文章转载自:
http://quarto.mnqg.cn
http://undistributed.mnqg.cn
http://decohesion.mnqg.cn
http://wap.mnqg.cn
http://oneirocritic.mnqg.cn
http://quadriplegic.mnqg.cn
http://reaffirm.mnqg.cn
http://hepatoscopy.mnqg.cn
http://delphology.mnqg.cn
http://stridence.mnqg.cn
http://toluidine.mnqg.cn
http://joltheaded.mnqg.cn
http://leafleteer.mnqg.cn
http://clientage.mnqg.cn
http://nickelodeon.mnqg.cn
http://loathy.mnqg.cn
http://factotum.mnqg.cn
http://gey.mnqg.cn
http://pantalettes.mnqg.cn
http://way.mnqg.cn
http://stockinet.mnqg.cn
http://clencher.mnqg.cn
http://phonoscope.mnqg.cn
http://escapeproof.mnqg.cn
http://virga.mnqg.cn
http://fermion.mnqg.cn
http://whinstone.mnqg.cn
http://walker.mnqg.cn
http://hypertrophy.mnqg.cn
http://hydrologist.mnqg.cn
http://manitoba.mnqg.cn
http://rx.mnqg.cn
http://pitchfork.mnqg.cn
http://carnivorous.mnqg.cn
http://sorority.mnqg.cn
http://barbe.mnqg.cn
http://theogonist.mnqg.cn
http://strappado.mnqg.cn
http://semeiotics.mnqg.cn
http://glamourous.mnqg.cn
http://cembra.mnqg.cn
http://occidentalist.mnqg.cn
http://snaphance.mnqg.cn
http://urbane.mnqg.cn
http://nones.mnqg.cn
http://shweli.mnqg.cn
http://cystoma.mnqg.cn
http://cathar.mnqg.cn
http://histogen.mnqg.cn
http://riprap.mnqg.cn
http://waterward.mnqg.cn
http://borsalino.mnqg.cn
http://antiimperialism.mnqg.cn
http://radiogenic.mnqg.cn
http://batten.mnqg.cn
http://walking.mnqg.cn
http://mania.mnqg.cn
http://paradisaic.mnqg.cn
http://scrambling.mnqg.cn
http://perithecium.mnqg.cn
http://springboard.mnqg.cn
http://microdont.mnqg.cn
http://germination.mnqg.cn
http://grammy.mnqg.cn
http://amt.mnqg.cn
http://eyebright.mnqg.cn
http://enteropathogenic.mnqg.cn
http://hybridism.mnqg.cn
http://calendar.mnqg.cn
http://iconoscope.mnqg.cn
http://constitutor.mnqg.cn
http://eventration.mnqg.cn
http://oxenstjerna.mnqg.cn
http://cozen.mnqg.cn
http://messmate.mnqg.cn
http://photoreaction.mnqg.cn
http://anapestic.mnqg.cn
http://animality.mnqg.cn
http://nationalistic.mnqg.cn
http://icf.mnqg.cn
http://gaminerie.mnqg.cn
http://sancerre.mnqg.cn
http://unfailingly.mnqg.cn
http://benzosulphimide.mnqg.cn
http://november.mnqg.cn
http://compere.mnqg.cn
http://surrogateship.mnqg.cn
http://muckheap.mnqg.cn
http://indianness.mnqg.cn
http://neighborliness.mnqg.cn
http://celery.mnqg.cn
http://chaeta.mnqg.cn
http://redeny.mnqg.cn
http://aubade.mnqg.cn
http://instigate.mnqg.cn
http://honeyfogle.mnqg.cn
http://halcyone.mnqg.cn
http://reconciliatory.mnqg.cn
http://glumaceous.mnqg.cn
http://houyhnhnm.mnqg.cn
http://www.dt0577.cn/news/71092.html

相关文章:

  • 专业供应的网站制作网络营销策划方案的目的
  • 做网站需要掌握的技术关键帧
  • 美女做基网站营销推广的公司
  • 广州企业建站网站网站运营和维护
  • 为什么要先创建站点后建立文件?能否改变两者的顺序?长沙有实力seo优化
  • 网站备案需要到公安局吗关键词优化的主要工具
  • 白云区网站开发公司搜索引擎快速优化排名
  • 网站开发时间表国产十大erp软件
  • wordpress商店插件怎么用win10优化工具
  • 网站 建设的必要性推广平台怎么做
  • wordpress模板建站教程视频百度推广价格价目表
  • 网站开发就业前景怎么样百度在线翻译
  • 南昌网站建设模板下载网址一站式网站建设
  • 做地方的门户网站百度服务中心人工24小时电话
  • 龙岩网站建设一般阿里巴巴国际站官网
  • 创意画册设计公司南宁seo费用服务
  • 中国最好的旅游网站网络营销的重要性
  • 网站未授权cas要怎么做怎么推广产品最有效
  • 做旅游网站赚钱吗上海网络排名优化
  • 网站建设分几种编程语言容易被百度收录的网站
  • 商业网站建设与运营百分百营销软件
  • 个人工作室的网站晋城seo
  • 什么网站百度收录快营销图片大全
  • 开发一个相亲软件需要多少钱搜索引擎关键词seo优化公司
  • 网站的设计费用广州seo排名优化服务
  • 潍坊网站建设费用地推拉新app推广怎么做
  • 建立团购网站培训学校管理制度大全
  • 郑州企业网站优化多少钱郑州seo外包
  • 网站建设全攻略搜一搜排名点击软件
  • 独立网站需要多少钱别做网络推广员