【问题标题】:How to parse Date object from JSON request with Form in Java Play如何在 Java Play 中使用 Form 解析 JSON 请求中的 Date 对象
【发布时间】:2014-03-19 17:56:07
【问题描述】:

我遇到了在 Java PLay 2.2.1 中使用 Form 解析 java.util.Date 类型时出错的问题。我的示例类的模型是:

   @Entity
   public class SampleModel extends Model
  {      
  @Id
  Long id;

  @Temporal(javax.persistence.TemporalType.TIMESTAMP)
  @Required(message="endHour must be specified.")
  @Formats.DateTime(pattern="yyyyMMddhhmmss")

  private Date date;

  public setId(Long id){

    this.id = id;
  }

  public Long getId(){

    return this.id;
  }

  public setDate(Date date){

    this.date = date;
  }

  public Date getDate(){

      return this.date;
  }

}

而在控制器中Form的使用是这样的:

public class ControllerSample extends Controller{

   public static Result create(){

       JsonNode request = request().body().asJson();

       Form<SampleModel> form = Form.form(SampleModel.class).bind(request);

       if(form.hasErrors())
       {
          //It always get Errors with dates
       }
       ....

       return ok();
   }
}

最后我贴出来的JSON是这样的:

{"date":"20140318120000"}

我找不到 Form 正确解析 Date 对象的方式。有人可以指导我吗?

【问题讨论】:

  • 你试过大写 H 的“yyyyMMddHHmmss”吗?
  • 是的,我有。它不断收到错误。感谢您的建议。
  • 您可以尝试在 @Formats.DateTime( 和您发送的 JSON 中像这样分隔日期部分:“yyyy.MM.dd HH:mm:ss”
  • 我最终为整个实体创建了自己的 json 解析器,并在该方法中完成了日期解析。感谢您的建议。
  • 错误是什么?您是否尝试将@Temporal 类型更改为Date

标签: java json date playframework-2.2


【解决方案1】:

您可以注册一个custom databinder,它将在您绑定表单和请求时使用。 只需查看官方文档中的示例,您就可以放心地将他们使用的LocalTime 替换为您的Date

编辑:哦,别忘了在表单请求绑定之前注册数据绑定器,以便它对绑定产生影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多