当前位置: 首页 > 知识库问答 >
问题:

SpringBoot TestRestTemboard和LocalDateTime不工作

袁桐
2023-03-14

我在我的模型中使用LocalDateTime,在包括LocalDateTimeDeserializer之后,将bean字段转换为

@NotNull
@Column(name = "created")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime created;

包括

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false

属性在SpringBoot的应用程序中。属性文件,应用程序最终能够反序列化JSON并正确显示如下内容:,

    "created": "2018-04-22T21:21:53.025",

但是,当我进行测试时,它会忽略WRITE_DATES_AS_TIMESTAMPS标志,我猜它会为上面相同的字符串日期生成一个输出,

"created":{"year":2018,"monthValue":4,"month":"APRIL","dayOfMonth":22,"dayOfYear":112,"dayOfWeek":"SUNDAY","hour":21,"minute":23,"second":16,"nano":986000000,"chronology":{"id":"ISO","calendarType":"iso8601"}}

请注意,在测试资源文件夹中包含application.properties属性不会更改任何内容。

我的测试配置看起来像,

@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration
@Category(IntegrationTest.class)
public class ApplicationTests {
....

你知道我做错了什么吗?

共有1个答案

郎弘壮
2023-03-14

我有同样的问题,下面的解决方案对我有效,

在Applicationtests类中添加以下代码

protected MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;

@Autowired
     public void setConverters(HttpMessageConverter<?>[] converters) {
         this.mappingJackson2HttpMessageConverter = (MappingJackson2HttpMessageConverter)Arrays.asList(converters).stream()
                 .filter(hmc -> hmc instanceof MappingJackson2HttpMessageConverter)
                 .findAny()              
                 .orElse(null);

         assertNotNull("the JSON message converter must not be null",
                 this.mappingJackson2HttpMessageConverter);

         final ObjectMapper objectMapper = new ObjectMapper();
         final JavaTimeModule javaTimeModule = new JavaTimeModule();
         objectMapper.registerModule(new Jdk8Module());
         objectMapper.registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES));
         mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
     }

如果你想支持你自己的日期格式,那么也添加格式化程序,//如果你需要支持不同的日期格式,下面的定制是必需的

javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeCustomSerializer());
            javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeCustomDeserializer());
             objectMapper.registerModule(javaTimeModule);

自定义类看起来像,

public class LocalDateTimeCustomSerializer extends LocalDateTimeSerializer {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss");
LocalDateTimeCustomSerializer() {
        this(FORMATTER);
    }

    public LocalDateTimeCustomSerializer(DateTimeFormatter f) {
        super(f);
    }

    @Override
    protected DateTimeFormatter _defaultFormatter() {
        return FORMATTER;
    }

}

public class LocalDateTimeCustomDeserializer extends LocalDateTimeDeserializer {

    public LocalDateTimeCustomDeserializer() {
        this(DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss"));
    }

    public LocalDateTimeCustomDeserializer(DateTimeFormatter formatter) {
        super(formatter);
    }
}
 类似资料:
  • 介绍 从Hutool的5.4.x开始,Hutool加入了针对JDK8+日期API的封装,此工具类的功能包括LocalDateTime和LocalDate的解析、格式化、转换等操作。 使用 日期转换 String dateStr = "2020-01-23T12:23:56"; DateTime dt = DateUtil.parse(dateStr); // Date对象转换为LocalDate

  • 伙计们,你们能帮帮忙吗 所以我正在尝试显示我从后端获得的数据,但似乎 *ngFor 不起作用,只想返回启用的大小如何使用 ngIf 这是模板 这是我得到的数据(我正在循环的部分) 所以我需要显示每个尺寸的价格,然后减去折扣,如果未启用,则显示隐藏该尺寸。

  • 我正在使用Tomcat8作为Spring Boot项目的一部分,我的acceptCount设置似乎不起作用。我的服务器不是只接受300个连接,而是接受了我扔给它的近1000个连接,当然同时处理的连接不超过200个。 Tomcat文档在AcceptCount上似乎很清楚:“当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。当队列满时接收的任何请求都将被拒绝。”但显然这不会发生。 当然还

  • 我正在做一个窗口,有一个大的文本区域和一个小的文本区域下。这是我到目前为止得到的: 这是我的代码: 我如何使较大的textarea部分透明,这样我就可以看到背景,我如何移动“比如说:”到较小的textarea前面?

  • 问题内容: 我知道: 即时是用于计算的“技术”时间戳表示(纳秒)。 LocalDateTime是日期/时钟表示形式,包括人类的时区。 最后,对于大多数应用程序用例,IMO都可以视为两种类型。例如:当前我正在运行一个批处理作业,我需要根据日期计算下一次运行,并且我正在努力寻找这两种类型之间的优缺点(除了Instant和时区部分的纳秒级精度优势)的LocalDateTime)。 您可以列举一些应用示例