简体   繁体   中英

Conditional validation in spring mvc

Now I have following controller method signature:

@ResponseBody
    @RequestMapping(value = "/member/createCompany/addParams", method = RequestMethod.POST)
    public ResponseEntity setCompanyParams(
            @RequestParam("companyName") String companyName,
            @RequestParam("email") String email,               
            HttpSession session, Principal principal) throws Exception {...}

I need to add validation for input parameters. Now I am going to create object like this:

class MyDto{
    @NotEmpty            
    String companyName;
    @Email // should be checked only if principal == null
    String email;   
}

and I am going to write something like this:

@ResponseBody
@RequestMapping(value = "/member/createCompany/addParams", method = RequestMethod.POST)
public ResponseEntity setCompanyParams( MyDto myDto, Principal principal) {
    if(principal == null){
        validateOnlyCompanyName(); 
    }else{
         validateAllFields();
    }
    //add data to model
    //return view with validation errors if exists.
}

can you help to achieve my expectations?

That's not the way Spring MVC validations work. The validator will validate all the fields and will put its results in a BindingResult object.

But then, it's up to you to do a special processing when principal is null and in that case look as the validation of field companyName :

@ResponseBody
@RequestMapping(value = "/member/createCompany/addParams", method = RequestMethod.POST)
public ResponseEntity setCompanyParams(@ModelAttribute MyDto myDto, BindingResult result,
        Principal principal) {
    if(principal == null){
        if (result.hasFieldErrors("companyName")) {
            // ... process errors on companyName Fields
        } 
    }else{
         if (result.hasErrors()) { // test any error
             // ... process any field error
         }
    }
    //add data to model
    //return view with validation errors if exists.
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM