【发布时间】:2015-06-26 14:19:14
【问题描述】:
在 Spring REST 应用程序中,每个 URL 都必须以应用程序 id (appId) 开头。此 appId 必须在每个单独的休息服务中进行验证。我没有复制代码,而是尝试使用 @Around 建议创建 @Aspect。这是在任何休息方法之前正确执行的。
但是,如果应用程序 ID 未知,我既不想创建堆栈跟踪,也不想返回 200(响应 OK)。相反,我确实想返回一个 BAD_REQUEST 响应代码。
如果我在我的建议中抛出异常,我会得到一个堆栈跟踪并且没有 HTTP 响应。另一方面,如果我返回任何其他内容(但不调用 pjp.proceed),我会得到 200 的返回码。
谁能帮助我将响应代码 400 返回给请求者?
到目前为止,在我的代码下方:
@Component
@Aspect
public class RequestMappingInterceptor {
@Autowired
ListOfValuesLookupUtil listOfValuesLookupUtil;
@Around("@annotation(requestMapping)")
public Object around(ProceedingJoinPoint pjp, RequestMapping requestMapping) throws Throwable {
Object[] arguments = pjp.getArgs();
if(arguments.length == 0 || !listOfValuesLookupUtil.isValidApplication(arguments[0].toString())) {
// toto : return bad request here ...
throw new BadRequestException("Application id unknown!");
} else {
return pjp.proceed();
}
}
}
【问题讨论】:
-
我是 AspectJ 专家,但不是 Spring MVC 专家。请为我提供更多坐标,并向我展示您想要拦截的一些方法签名(返回类型和参数)。您的请求映射方法是否实际上返回类似
ResponseEntity<String>的内容?我需要完整的图片才能回答。 -
请在这个帖子中查看我的答案。我解释并提供示例代码stackoverflow.com/a/50712697/3073945
标签: spring aop spring-aop bad-request