Multiple response http status in Spring MVC

后端 未结 1 1570
走了就别回头了
走了就别回头了 2021-02-14 09:14

Having the following code:

@RequestMapping(value =  \"/system/login\", method = RequestMethod.GET)
public void login(@RequestBody Login login) {
    if(login.use         


        
相关标签:
1条回答
  • 2021-02-14 09:29

    One approach which someone suggested at SO is to throw different exceptions which will be catch by different exception handlers:

    @RequestMapping(value =  "/system/login", method = RequestMethod.GET)
    public void login(@RequestBody Login login) {
        if(login.username == "test" && login.password == "test") {
             throw new AllRightException();
        }
        else {
             throw new AccessDeniedException();
        }
    }
    
    @ExceptionHandler(AllRightException.class)
    @ResponseStatus(HttpStatus.OK)
    public void whenAllRight() {
    
    }
    
    @ExceptionHandler(AccessDeniedException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void whenAccessDenied() {
    
    }
    

    See also:

    • @ExceptionHandler
    • @ResponseStatus

    BTW, your example code contains error: login.password == "test" you should use equals() there :)


    Updated: I found another approach which even better because it doesn't use exceptions:

    @RequestMapping(value =  "/system/login", method = RequestMethod.GET)
    public ResponseEntity<String> login(@RequestBody Login login) {
        if(login.username == "test" && login.password == "test") {
             return new ResponseEntity<String>("OK" HttpStatus.OK);
        }
    
        return new ResponseEntity<String>("ERROR", HttpStatus.BAD_REQUEST);
    }
    

    See also ResponseEntity API

    0 讨论(0)
提交回复
热议问题