2016-10-15 2 views
0

J'utilise @Restcontroller et @Vaid.Ajouter une valeur dans l'objet de requête avant la validation

@RequestMapping(path = "/1050" 
    method = RequestMethod.POST, 
      headers = {"Content-Type=application/json"}, 
      consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, 
      produces = MediaType.APPLICATION_JSON_UTF8_VALUE 

) 
     public UserListResp getUserList(@RequestBody @Valid UserListReq request, BindingResult bindingResult, 
             Principal principal){ 

    UserListResp response = new UserListResp(); 

    if (bindingResult.hasErrors()){ 


      response.setResultCode(102); // Validation error 
      response.setErrMsg("Wrong " + bindingResult.getFieldError().getDefaultMessage() + " value."); 

     } else { 
      return userService.getUserList(request) ; 
     } 

      return response; 
    } 

Demande entrante mappée à l'objet qui a été validée.

public class UserListReq { 

    private String userName; 
    .... 
} 

Je ne reçois pas cette valeur (userName) de demande JSON entrant, j'ai du service oAuth par jeton. Est-il possible d'envoyer userName à la contrainte de validation de @ControllerAdvice?

@InitBinder 
    public void dataBinding(WebDataBinder binder, HttpServletRequest req) { 

     // userName 
     req.getUserPrincipal().getName(); 
    } 

Merci.

+0

check http://stackoverflow.com/questions/14732598/spring-mvc-process-object-before-valid-is-applied~~V~~singular~~3rd – kuhajeyan

+0

Merci Mais mon problème plus difficile . J'ai contrôleur de repos et j'ai envoyé json dans la requête de corps (je n'utilise pas les paramètres de forme POST ou GET). – koa73

Répondre

0

J'ai trouvé la décision

@ControllerAdvice 
public class GlobalControllerAdvice { 


    @InitBinder 
    public void dataBinding(WebDataBinder binder, HttpServletRequest request) { 

     binder.bind(new MutablePropertyValues(Collections.singletonMap("userName",request.getUserPrincipal().getName()))); 
    } 

}