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



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

问题是,如果日期的格式不正确,服务器会给出400 Bad Request,因为Joda格式化程序在转换过程中抛出了IllegalArgumentException

我可以让转换器在转换失败时返回null(用户键入的错误日期模式),但这会在两种情况下给我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
}

我认为你应该像下面这样使用@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;
}

希望能有所帮助。

最新更新