2014-10-08 66 views
0

我有一个自定义参数转换器&杰克逊映射器来处理弹簧控制器输入乔达DateTime可选Joda DateTime类型字段与JSR 303验证和弹簧转换器

问题是,如果日期格式不正确,那么服务器会给出400 Bad Request,因为转换期间由Joda格式器引发的IllegalArgumentException

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

  • 用户离开领域的空白(这是确定的可选字段)不正确的格式
  • 用户提供的日期(永远OK)

如何区分那些scenerios到“允许空(空场),但如果不为空,检查日期格式”?

背景:字段在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 
} 
+0

请发布您的POJO – 2014-10-08 12:49:40

+0

@Amrola添加表格POJO – 2014-10-08 12:58:21

+0

您是否也使用hibernate验证? – 2014-10-08 13:00:32

回答

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; 

} 

希望帮助。

+0

您必须知道我没有机会进入控制器甚至是JSR bean验证。 400错误请求可能被Spring转换器激怒,它在JSR验证之前启动 – 2014-10-09 06:36:48

+0

您的问题是:如何区分那些scenerios为“允许null(空字段),但如果不为空,则检查日期格式”? – 2014-10-09 06:41:23

+0

是的,如果用户输入not-empty-with-bad-format日期,那么你的@ScriptAssert将不会触发,因为JSR验证不会触发,因为Spring ** coversion **将强制执行400个错误请求 – 2014-10-09 08:25:57