gpt4 book ai didi

java - 返回 HttpStatus 代码的更好方法 Spring REST

转载 作者:行者123 更新时间:2023-12-02 11:20:08 24 4
gpt4 key购买 nike

我使用spring开发rest服务很长时间了,到目前为止我返回http状态代码的方法是这样的:

    @RequestMapping(value = "/sth")
public void name(HttpServletResponse response){
boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
if(lever){
response.setStatus(HttpServletResponse.SC_OK);
}else{
response.setStatus(HttpServletResponse.SC_BAD_REQUEST); //NOT_FOUND or whatever
}
}

但我确信有更好的方法来做到这一点。我知道我们有 @ResponseStatus 注释,但它是..静态的,我的意思是它总是返回相同的代码 - 但如果出现问题怎么办?然后我不想将 200 OK 作为响应代码。

我找到了这样的解决方案:添加@ResponseStatus作为静态响应代码,但是当 Controller 中出现问题时,然后抛出一些自定义异常并将其捕获新的@ControllerAdvice类,并且还添加@ResponseStatus注释并返回正确的代码。

    @RequestMapping(value = "/sth")
@ResponseStatus(HttpStatus.OK)
public void name(HttpServletResponse response) throws Exception{
boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
if(!lever){
throw new SomethingWentWrongCustomException("Not okay..");
}
}

然后在类中捕获它,例如:

@ControllerAdvice
public class SomethingControllerAdvice{
@ExceptionHandler(value = SomethingWentWrongCustomException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void someName(){
}
}

这似乎是相当优雅的解决方案,但代码相当..罗嗦,不是吗?另一方面,如果我对整个应用程序采用这个并创建 @ControllerAdvice 类,那么它可能有意义你怎么看待这件事?还有其他更好的方法吗?

我希望这不是基于意见的问题,我也不希望这样。我只是不想使用反模式并从一开始就有良好的实践:)

最佳答案

返回 ResponseEntity 正如 @M-deinum 所写,这绝对是一个可行的方法。此外,您无需在 @ControllerAdvice 中定义每个异常的行为,只需使用适当的 @ResponseStatus 注释来注释您的异常类。

@ResponseStatus(HttpStatus.BAD_REQUEST)
class SomeException extends RuntimeException {

}

关于java - 返回 HttpStatus 代码的更好方法 Spring REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27777518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com