从Spring REST API返回HTTP代码200

33

我想使用这段代码来接收带有值的http链接:

@PostMapping(value = "/v1/notification")
public String handleNotifications(@RequestParam("notification") String itemid) {
    // parse here the values
    return "result successful result";
}

如何返回HTTP状态码200表示成功的响应?

例如,如果在代码处理过程中存在代码异常,如何返回错误404

Translated text:

如何返回HTTP状态码200表示成功的响应?

例如,如果在代码处理过程中存在代码异常,如何返回错误404


请查看我的回答,已进行更新。 - lealceldeiro
4个回答

34

如果您正在使用Spring:

@PostMapping(value = "/v1/notification")
public ResponseEntity handleNotifications(@RequestParam("notification") String itemid) {
    // parse here the values
    return ResponseEntity.ok().build(); 
    //OR ResponseEntity.ok("body goes here");
}

14

如果你使用@RestController,默认情况下应该返回200。

但是无论如何,你都可以通过@ResponseStatus注解设置特定的响应状态(即使方法返回void),或者通过ResponseEntity返回自定义响应。

编辑:添加错误处理

对于错误处理,你可以返回一个特定的响应实体:

 return ResponseEntity.status(HttpStatus.FORBIDDEN)
            .body("some body ");

或者你可以使用 @ExceptionHandler:

   @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public void handleError(Exception ex) {
        // TODO: log exception
    }

12
你可以通过在你的方法上使用@ResponseStatus注解并使用HttpStatus.OK(默认情况下应该是200)来完成它,就像这样:

某个控制器

@PostMapping(value = "/v1/notification")
@ResponseStatus(HttpStatus.OK)
public String handleNotifications(@RequestParam("notification") String itemid) throws MyException {
    if(someCondition) {
       throw new MyException("some message");
    }
    // parse here the values
    return "result successful result";
}
现在,为了在处理特定异常时返回自定义代码,您可以创建一个完全独立的控制器来执行此操作(虽然您也可以在同一控制器中执行此操作),该控制器继承自ResponseEntityExceptionHandler并带有注释@RestControllerAdvice,它必须具有处理下面所示特定异常的方法:

异常处理控制器

@RestControllerAdvice
public class ExceptionHandlerController extends ResponseEntityExceptionHandler {

    @ExceptionHandler(MyException.class)
    protected ResponseEntity<Object> handleMyException(MyException ex, WebRequest req) {
        Object resBody = "some message";
        return handleExceptionInternal(ex, resBody, new HttpHeaders(), HttpStatus.NOT_FOUND, req);
    }

}

1
如果方法代码中出现异常,我该如何返回错误状态码? - Peter Penzov
我不太明白你的意思。你是指如果出现异常,如何修改响应状态码?请编辑问题以使其更清晰。 - lealceldeiro
请注意,Boot默认处理异常转换;您只需抛出带注释的异常即可。 - chrylis -cautiouslyoptimistic-
在我看来,返回像String这样的基本类型,让Spring隐式处理创建ResponseEntity比手动构建ResponseEntity更加简洁。 - Adam Hughes
如何实现所有建议。你能为MyException类写一个例子吗? - Nikzin
@Nikzin 我不太明白你的意思。你是指一个MyException类实现的例子吗?如果是这样,它只是一个普通的Java类,继承了其中一个Java异常类,比如RuntimeException - lealceldeiro

6
你可以这样做:
@PostMapping(value = "/v1/notification")
public ResponseEntity<String> handleNotifications(
 @RequestParam("notification") String itemid) {
   // parse here the values
   return new ResponseEntity<>("result successful result", 
   HttpStatus.OK);
}

我得到了“无法推断ResponseEntity<>的类型参数”的错误。 - Peter Penzov
修改了原始答案,你具体需要什么? - Manish Karki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接