接受并返回java.时间在我的控制器里

Accepting and returning java.time in my controller

本文关键字:我的 控制器 时间 java 返回      更新时间:2023-09-26

在使用spring-boot时,我试图使用java。时间在我的控制器里。更具体地说,我试图使LocalDate javascript友好。通过友好,我的意思是输出它的格式javascript可以解析,也使我的控制器接受数据张贴(或放…从角(或类似的)。

我的实体如下所示:

@Entity
public class Expense {
    @Id
    @GeneratedValue
    private long id;
    ...
    private LocalDate date;
    public Expense() {
    }
    public LocalDate getDate() {
        return date;
    }
    public void setDate(final LocalDate date) {
        this.date = date;
    }
    ...
}

我的控制器看起来像这样:

@RestController
@RequestMapping("/api")
public class ExpenseController {
    @Autowired
    private ExpenseService service;
    @RequestMapping("/expense")
    public Iterable<Expense> findAll() {
        return service.findAll();
    }
    @RequestMapping(value = "/expense", method = RequestMethod.POST)
    public Expense save(@RequestBody Expense expense) {
        return service.save(expense);
    }
    ...
}

我已将以下内容添加到我的pom文件中。这会导致LocalDate作为[yyyy, mm, dd]列表返回,但javascript不喜欢这样。而且它仍然不接受来自浏览器的格式。

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.5.2</version>
</dependency>

我基本上在寻找的是一种返回java的方法。时间类型在javascript友好的格式,也能够接收他们,当我张贴到我的控制器。

我已经看到@DateTimeFormat在很多地方使用,以及@JsonFormat,但我可能无法让它工作。此外,我正在寻找一种方法来全局处理这个。

谁能给我一些关于如何做这件事的信息?

完整的代码可以在https://github.com/tonsV2/MyBiz

找到

更新:我已经尝试将以下bean添加到我的@SpringBootApplication类。

@Bean
public ObjectMapper objectMapper() {
    final ObjectMapper mapper = new ObjectMapper();
    mapper.configure(WRITE_DATES_AS_TIMESTAMPS, true);
    return mapper;
}

我想这应该能解决问题

@Bean
public Module getLocalDateModule() {
    SimpleModule sm = new SimpleModule("LocalDateModule");
    sm.addSerializer(LocalDate.class, new JsonSerializer<LocalDate>() {
        @Override
        public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
            jsonGenerator.writeString(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'00:00:00.000'Z'")));
        }
    });
    return sm;
}

JSR310可能不起作用,因为https://github.com/FasterXML/jackson-datatype-jsr310

LocalDate, LocalTime, LocalDateTime,和OffsetTime,不能可移植地转换为时间戳,并表示为

WRITE_DATES_AS_TIMESTAMPS是启用的。