【问题标题】:datetime formatting in joda, jackson, hibernatejoda,jackson,hibernate中的日期时间格式
【发布时间】:2014-07-07 12:02:27
【问题描述】:

如何在 joda、jackson、hibernate 中设置日期时间格式。

import org.joda.time.DateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
//other imports...

@Entity
public class Example {

    @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")   
    @JsonFormat(pattern = "dd/MM/yyyy'T'HH:mm")
    private DateTime eventDateTime;     

//getters setters
}


//registration joda jackson module:
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.registerModule(new JodaModule());
  objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
  DateFormat df = new SimpleDateFormat("dd/MM/yyyy'T'HH:mm");        
  objectMapper.setDateFormat(df); 


//If I send JSON like:
{"eventDateTime": "19/05/2014T14:8"}

//my spring controller:
@RequestMapping(method = RequestMethod.POST)    
    public void saveExample(@RequestBody Example example ) { ..

我的 Spring 控制器在反序列化 eventDateTime 时总是失败,所以我收到响应错误 400“客户端发送的请求在语法上不正确”。

如果我将日期时间格式更改为:

{"eventDateTime": "2014-05-19T14:8"}

它有效。

【问题讨论】:

    标签: spring hibernate spring-mvc jackson jodatime


    【解决方案1】:

    {"eventDateTime": "2014-05-19T14:8"} 示例有效的原因是它采用 ISO 8601 日期格式。我建议您将日期时间格式设置为 ISO 8601 标准,因为您已经看到 Jackson 可以处理它。

    我猜您正在检索它并使用 JavaScript 将其发送回服务器。如果是这样,您应该知道 JS 可以解析日期,只要它是几种格式之一。 (请参阅the Date object 和 dateString 参数)然后您可以使用 JavaScript 对其进行格式化,但您想要显示。

    只要 JavaScript 知道它是一个日期,它就应该以它可以识别的格式将它发送回杰克逊(不确定这是自纪元以来的毫秒数,ISO 8601 还是什么,但它有效)。如果 JavaScript 将日期视为字符串,那么它会将其作为字符串传回,Jackson 可能不知道如何处理它。

    您可以强制 Jackson 使用 JsonDeserializer 处理自定义日期格式。有关如何实施的详细信息,请参阅https://stackoverflow.com/a/5598277/965150

    【讨论】:

    • 我需要 "dd/MM/yyyy" 格式的日期,原因是 jquery 插件,它不适用于 "yyyy-MM-dd" 并且任何格式之间的 javascript 转换都是浪费。跨度>
    • 我认为问题出在 netween joda 和 jackson 的集成中,因为 @JsonFormat(pattern = "dd/MM/yyyy'T'HH:mm") 适用于 java.util.Date 类型。
    • 正如我在回答末尾提到的,尝试使用泛型的 JsonDeserializer。您可以为您的 joda DateTime 对象指定任何您喜欢的转换策略。
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多