抛出异常时缺少错误响应正文@Around(“ @ RequestMapping”)

时间:2019-01-16 12:12:12

标签: java spring aspectj

当我在带有CustomAnnotation注释的函数周围引发异常时,我得到的响应看起来像这样:

{
    "timestamp": "Jan 16, 2019 5:33:08 PM",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/path"
}

但是当我在@annotation(org.springframework.web.bind.annotation.RequestMapping)周围执行此操作时,我收到的状态为401,但没有响应正文。为什么缺少响应主体,我该如何解决?

这是代码的样子:

@Component
@Aspect
public class AnnotationProcessor {
    @Around("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
//    @Around("@annotation(path.to.my.CustomAnnotation)")
    public Object proceed(ProceedingJoinPoint call) throws Throwable {
        throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Unauthorized");
    }
}

我的目标是基于为控制器方法指定的注释来验证传入的请求。

如果有人可以提出解决方案/更好的方法来实现相同目标,那就太好了。

1 个答案:

答案 0 :(得分:0)

我建议使用ResponseEntity而不是抛出状态异常

public ResponseEntity<Void> proceed(ProceedingJoinPoint call){
    return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}

您也可以在该ResponseEntity对象上处理其他HttpStatus。