Spring MVC中来自LocalDateTime(java 8)的Json字符串

Nam*_*jug 3 java mysql spring json spring-mvc

在Spring MVC框架中的LocalDateTime(Java 8)格式化中遇到问题

我的VO就像代码一样

在mySQL w_date字段中是DATETIME并重新编码"2015-12-25 23:18:22"

public class HistoryBoard { 
    @JsonFormat(pattern="yyyy-MM-dd")
    @DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
    private LocalDateTime w_date;


    public LocalDateTime getW_date() {
        return w_date;
    }

    public HistoryBoard setW_date(String w_date) {
        DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
        this.w_date = LocalDateTime.parse(w_date, sdf);
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

添加maven依赖

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.5.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

并添加@JsonFormat(pattern="yyyy-MM-dd")字段值w_date

但仍然json得到像对象

"w_date":{"dayOfMonth":25,"dayOfWeek":"FRIDAY","month":"DECEMBER","year":2015,"dayOfYear":359,"monthValue":12,"hour":23,"minute":18,"second":22,"nano":0,"chronology":{"id":"ISO","calendarType":"iso8601"}
Run Code Online (Sandbox Code Playgroud)

json页面控制器代码

@RequestMapping(value = "/listJson.do")
public @ResponseBody Object listJson(Map<String, Object> commandMap, ModelMap model) throws Exception {
    List<HistoryBoard> list = boardService.selectBoardList(commandMap);
    return list;

}
Run Code Online (Sandbox Code Playgroud)

mjl*_*wky 5

这里回答类似的问题.您可能需要添加@JsonSerialize(using = LocalDateTimeSerializer.class)到您的字段中.

您还可以创建如下的自定义序列化程序:

public class CustomLocalDateTimeSerializer extends JsonSerializer<LocalDateTime>{

    @Override
    public void serialize(LocalDateTime dateTime, JsonGenerator generator, SerializerProvider sp)
            throws IOException, JsonProcessingException {
        String formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); 
        generator.writeString( formattedDateTime);
    }

}
Run Code Online (Sandbox Code Playgroud)

并在LocalDateTime字段中使用该自定义序列化程序:

@JsonSerialize(using = CustomLocalDateTimeSerializer.class)
private LocalDateTime w_date; 
Run Code Online (Sandbox Code Playgroud)