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

Posted

技术标签:

【中文标题】来自 Spring MVC 中 LocalDateTime(java 8) 的 Json 字符串【英文标题】:Json string from LocalDateTime(java 8) in Spring MVC 【发布时间】:2016-03-31 13:40:03 【问题描述】:

在 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;
    

添加maven依赖

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

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

但还是 json 得到 Object 之类的

"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"

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;


【问题讨论】:

您的预期行为是什么? @SazzadHissainKhan 在 mySQL DB DATETIME 字段中显示类似“2015-12-25 12:10”的 json 你不想要第二个和纳米部分吗? @SazzadHissainKhan 不想要第二个,但 Json 显示了对象类型 【参考方案1】:

here 回答了类似的问题。您可能需要将@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);
    


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

@JsonSerialize(using = CustomLocalDateTimeSerializer.class)
private LocalDateTime w_date; 

【讨论】:

如果你使用的是Joda时间,使用:import com.fasterxml.jackson.datatype.joda.ser.LocalDateTimeSerializer; gradle:编译“com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.1”

以上是关于来自 Spring MVC 中 LocalDateTime(java 8) 的 Json 字符串的主要内容,如果未能解决你的问题,请参考以下文章

最强总结:Spring MVC 接收请求参数的所有方式!

如何使用 RestTemplate 在 Spring MVC 应用程序中访问来自(来自 Spring RESTful 服务)的巨大 JSON

来自 spring mvc 的 LDAP 身份验证

DispatcherServlet 的 Spring MVC 中来自 REST 端点的 404 错误

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

最新的 Spring Data/Hibernate 在本机查询中不支持 java.time.LocalDate?