有没有更好的方法在Spring REST代码中返回HttpStatus?

萍水相逢 5月前

我使用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响应码怎么办?

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


我想到通过Advice方式,来拦截和返回对应的响应码,但是这个设计感觉很糟糕。

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



请问有没有更好的办法

*
*