在我的控制器中接受并返回java.time

时间:2015-10-04 07:00:00

标签: javascript java angularjs spring-boot java-8

使用spring-boot时我试图在我的控制器中使用java.time。更具体地说,我试图使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>

我基本上寻找的是一种以javascript友好格式返回java.time类型的方法,并且当我发布到我的控制器时也可以接收它们。

我已经看到@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;
}

1 个答案:

答案 0 :(得分:0)

我认为这应解决问题

@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时的数组。