带有JSR 303验证和Spring转换器的可选Joda DateTime类型字段

时间:2014-10-08 12:29:48

标签: java spring spring-mvc jodatime bean-validation

我有一个自定义参数转换器& Jackson映射器在Spring控制器输入上处理Joda DateTime

问题是,如果日期以错误的格式提供,那么服务器会给出400 Bad Request,因为转换期间Joda格式化程序会抛出IllegalArgumentException

我可以让转换器在失败的转换(用户输入的错误日期模式)上返回null,但是在两种情况下这会给我null:

  • 用户左侧字段空白(在可选字段中确定)
  • 用户提供的日期格式不正确(永远不会)

如何区分这些场景到“允许空(空字段),但如果不为空,请检查日期格式”?

背景:字段在POJO中表示为DateTime,并在@Controller中作为@RequestBody @Valid收到,因为它是AJAX发布的。

表格POJO:

class MyForm {
@NotEmpty
private String name;

private DateTime expireOn; // JODA, optional but won't bad-format as null.

// getters, setters
}

1 个答案:

答案 0 :(得分:0)

我认为您应该使用@ScriptAssert,如下所示:

@ScriptAssert(lang = "javascript", script = "_this.validateExpireOn(_this.expireOn)")
 public class MyForm{


       public boolean validateExpireOn(Object obj){

            // here you check your expireOn Object if null or not , if not null check date format
            // this method should return boolean as if valid or not valid 
       }

        private DateTime expireOn;

}

希望能帮助。