Spring MVC中的多响应http状态

Ali*_*Ali 9 spring-mvc java-ee

拥有以下代码:

@RequestMapping(value =  "/system/login", method = RequestMethod.GET)
public void login(@RequestBody Login login) {
    if(login.username == "test" && login.password == "test") {
         //return HTTP 200
    }
    else {
         //return HTTP 400
    }
}
Run Code Online (Sandbox Code Playgroud)

我想根据我的逻辑返回两种不同的HTTP状态.实现这一目标的最佳方法是什么?

Sla*_*hin 19

有人在SO中建议的一种方法是抛出不同的异常,这些异常将由不同的异常处理程序捕获:

@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() {

}
Run Code Online (Sandbox Code Playgroud)

也可以看看:

顺便说一句,你的示例代码包含错误:login.password == "test"你应该equals()在那里使用:)


更新:我发现了另一种更好的方法,因为它不使用异常:

@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);
}
Run Code Online (Sandbox Code Playgroud)

另请参阅ResponseEntity API