2014-10-08 4 views
0

사용자 정의 매개 변수 변환기가 &입니다. 스프링 컨트롤러 입력시 Joda DateTime을 처리하는 Jackson 매퍼입니다.JSR 303 Validation 및 Spring 변환기가있는 Joda DateTime 유형 필드

변환 중에 Joda 포맷터가 IllegalArgumentException을 던집니다 때문에 서버가 400 Bad Request에 날짜가 잘못된 형식으로 표시되면 문제가 발생합니다.

내가 (사용자가 잘못된 날짜 패턴 입력) 컨버터가 변환 실패에 null을 반환 할 수 있도록 수 있지만,이 두 가지 상황에서 나에게 널을 줄 것이다

:

  • 사용자 왼쪽 필드 (옵션 필드에 확인되는) 빈

방법 에 그 scenerios을 차별화 (결코 확인) 잘못된 형식의

  • 사용자가 제공 한 날짜는 "널 (빈 필드)를 허용하지만 비어 있지 않은 경우, 날짜 형식을 확인"?

    배경 : 필드 DateTime로 POJO로 표현하고이 AJAX - 게시 becaus @RequestBody @Valid@Controller 수신된다.

    양식 POJO :

    class MyForm { 
    @NotEmpty 
    private String name; 
    
    private DateTime expireOn; // JODA, optional but won't bad-format as null. 
    
    // getters, setters 
    } 
    
  • +0

    POJO를 게시하십시오 –

    +0

    @Amrola 추가 된 양식 POJO –

    +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; 
    
    } 
    

    희망.

    +0

    컨트롤러 및 JSR Bean 유효성 검사를받을 기회가 없다는 것을 알아야합니다. 400 잘못된 요청 JSR 유효성 검사 전에 시작하는 봄 변환기에 의해 trigerred 아마도 –

    +0

    : 해당 scenerios "Null (빈 필드), 수 있지만 비어 있지 않은 경우 날짜 형식 확인"구별 할 방법? –

    +0

    그렇습니다. 사용자가 bad-with-bad-format 날짜를 입력하면 JSR 유효성 검사가 트리거되지 않기 때문에 @ScriptAssert가 트리거되지 않습니다. Spring ** coversion **이 400 개의 잘못된 요청을 강제 할 것이기 때문입니다 –

    관련 문제