加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-ee – Spring MVC中的多个响应http状态

发布时间:2020-12-14 05:15:21 所属栏目:Java 来源:网络整理
导读:具有以下代码: @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 }} 我想根
具有以下代码:
@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
    }
}

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

解决方法

有人在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() {

}

也可以看看:

> @ExceptionHandler
> @ResponseStatus

BTW,你的示例代码包含错误: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);
}

参见ResponseEntity API

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读