2017-10-11 23 views
0

你好嗎?只驗證用戶輸入的一些屬性,用彈簧啓動的休息服務

我正在開發使用Java和Spring引導休息服務,我有一個關於用戶輸入與javax.validation的驗證問題。

假設我有名字和年齡屬性的用戶模型。

而且還我有兩個端點(A和B)假設,並在端點A我只需要校驗的名稱和端點B我需要驗證只是年齡。

我現在面臨的問題是,使用javax.validation我需要在兩個端點驗證兩個屬性。有沒有辦法只驗證我需要在某個端點驗證的字段?或者某種方式來禁用端點中某些屬性的驗證?

例子

用戶 公共類用戶{

@NotEmpty(message="You need to pass the name parameter") 
    private String name; 

    @NotEmpty(message="You need to pass the age parameter") 
    private int age; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 
} 

用戶RestController

@RestController 
@RequestMapping("/v1/user") 
public class UserController { 

    @Autowired 
    private User _user; 

    @RequestMapping(value = "/endpoint-a", method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE}) 
    @ResponseBody 
    public ResponseEntity<?> doPostEndpointA(@Valid @RequestBody User user) { 
     // only validate the user name 
    } 

    @RequestMapping(value = "/endpoint-b", method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE}) 
    @ResponseBody 
    public ResponseEntity<?> doPostEndpointB(@Valid @RequestBody User user) { 
     // only validate the user age 
    } 
} 
+1

春季啓動具有斷言類它會幫助你。只要寫第一行控制器方法,如Assert.notNull(user.getName(),「你需要傳遞名稱參數」);請參閱doc這裏 - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/Assert.html –

+0

謝謝!它幫助我很多! –

回答

0

通過將驗證在域級驗證,將執行不管什麼終點被稱爲。

如果每個端點需要不同的驗證把該邏輯控制器中的和從域類中刪除。如果需要來保持域類的驗證,並且每個端點只驗證一個字段,則默認值可能會爲您解決這個問題。