java - 使用@JsonCreator 和@JsonProperty 未按预期生成 Json 响应

标签 java json spring annotations jackson

我正在使用 JDK 1.6、Jackson 2.0.5、Spring 3.0.3 并使用 jackson 注释来序列化和反序列化 json 响应。

public class MyDate extends java.sql.Date{

  private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy");
  private String dateString;

  @JsonCreator
  public MyDate(@JsonProperty("dateString") String date){
        super(simpleDateFormat.parse(date).getTime());
        dateString = date;
  }

  public String getDateString(){
        return dateString;
  }
  private final setDateString(String date){
        // .....
  }
}

我收到类似 1417977000000 的 json 响应消息,但它应该类似于 12/08/2014。 我还需要写其他东西吗?

我试着关注 Jackson wiki page文章。

编辑:

在与@Sotirios Delimanolis 的讨论的基础上,我在 getter 方法上尝试了 JsonValue 注释,它成功了。

  @JsonValue
  public String getDateString(){
        return dateString;
  }

最佳答案

您的类型是 java.sql.Date,这是一个 java.util.Date,被认为是 Jackson 的特殊类型。默认情况下,它会将日期(java.util.Date 类型的实例)写入它们的时间戳。你可以禁用它

objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

或您的 Jackson 版本的相应配置。

然而,这会给你类似的东西

"2014-12-08T08:00:00.000+0000"

它不会使用您的SimpleDateFormat。你可以像这样用 ObjectMapper 注册一个 DateFormat

objectMapper.setDateFormat(new SimpleDateFormat("MM/dd/yyyy"));

最好的解决方案是使用组合而不是继承。不要直接或间接扩展 java.util.Date

关于java - 使用@JsonCreator 和@JsonProperty 未按预期生成 Json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386883/

相关文章:

java - 将客户端自签名证书导入 java keystore

json - 直接从 mgo 结果流式传输到 json,无需反序列化到 go 中的结构

Spring MVC : Url path appending when posting the form

java - JComponents 的某些部分与 Ubuntu 不兼容?

java - 三月两个日期之间的天数差异错误

asp.net - Dotnetopenauth,从 facebook 范围检索电子邮件

Android - 对远程服务器的 Volley JSON 请求只能正常工作一次

spring - Java 配置与组件扫描注释

java - 如何在 Spring 中将 ElasticSearch 模型字段标记为 KeyWord 类型?

java - HashMap 作为唯一值存储/实例计数器。 java