2017-12-14 2 views
0

에 다른 레이어에 대한 검증 주석 여러 계층 (REST, 서비스, 지속성)에 대한 요청을 나타냅니다.봄 (부팅) <em>봄 부팅</em>, <em>봄</em> MVC와 <em>봄 데이터</em>와 하나 개의 클래스 (<em>MongoDB를 데이터베이스로</em>으로) 사용과 웹 응용 프로그램을 감안할 때 같은 클래스

일부 클래스가 특정 레이어에만 적용되거나 일부 클래스에서 무시되는 것처럼 클래스의 필드에 대한 유효성 검증 제한 조건을 선언적으로 지정할 수 있습니까?

예 :

@NotEmpty 엔티티가 말뭉치 주석

REST의 API 계층

JSR 303 이다 (getter 및 setter 생성됨)

public class User { 

    private String name; 

    @NotEmpty 
    private String role; 
} 

role 서비스 계층

role을 구현하여 설정되고 repo스프링 데이터MongoRepository 인 지속성 층

@Service 
public class UserService { 

    @Autowired 
    private UserRepo repo; 

    private User createAppUser(User u) { 
     u.setRole("APP_USER"); 
     return repo.save(u); 
    } 
} 

에 필요한

@RestController 
public class RegisterController { 

    @Autowired 
    private UserService service; 

    @PostMapping 
    public User register(@Valid User u) { 
     return service.createAppUser(u); 
    } 
} 

현재 존재하지 않는다.

나는이 해결 두 가지 방법을 생각할 수 있습니다

  1. 는 REST API를 층
  2. 수동/절차 확인을 위해 DTO 객체를 소개를; 그들은 보일러의 많이 필요하고이 사소한 경우와 같이 내가 아주 많이 좋아하지 않아 둘

선언 단순히 아무것도 - 중 스프링을 사용하여Validator 또는 뭔가 다른, 중요하지 않습니다.

+2

를 사용하여 유효성 검사 그룹. 해당 그룹이 적용되는 주석에서 지정하고 다른 레벨에서 유효성을 검증하려는 그룹을 지정하십시오. –

답변

2

유효성 검사 그룹 및 @Validated 주석을 사용할 수 있습니다. 이 같은

:

법인

@NotEmpty(groups = Create.class) 

방법

public User register(@Validated(Create.class) User u) { 
    return service.createAppUser(u); 
} 
관련 문제