所以问题就是这样,对于我的所有REST API端点,我的RESPONSE Body中应该总共有3个字段,例如:{
"status": "SUCCESS",
"message": "A list of a recent post",
"data" : [LIST OF POSTS]
}要么{
"status" : "NOT_AUTHORIZED",
"message": "User does not have previledge to access this resource",
"errors": ["User does not have Admin access"]
}所以你可以得到这个想法,我希望这个消息状态错误或数据字段存在于我的REST API中的所有响应中。
3 回答
杨魅力
TA贡献1811条经验 获得超6个赞
它可以通过以下方式实现ResponseBodyAdvice:
允许在执行一个
@ResponseBody或一个ResponseEntity控制器方法之后但在使用一个主体写入正文之前自定义响应HttpMessageConverter。实现可以直接注册
RequestMappingHandlerAdapter,ExceptionHandlerExceptionResolver或者更可能注释,@ControllerAdvice在这种情况下,它们将被两者自动检测。
所以你可能有类似的东西:
@ControllerAdvicepublic class MyResponseBodyAdvisor implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType,
Class<? extends HttpMessageConverter<?>> converterType) {
return converterType.isAssignableFrom(MappingJackson2HttpMessageConverter.class);
}
@Override
public Object beforeBodyWrite(Object body,
MethodParameter returnType,
MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request,
ServerHttpResponse response) {
MyResponseWrapper wrapper = new MyResponseWrapper();
wrapper.setData(body);
return wrapper;
}}哪里MyResponseWrapper是你用来包裹响应有效载荷类。
ABOUTYOU
TA贡献1812条经验 获得超5个赞
您可以使用ResponseBodyAdvice<T>全局拦截响应POJO,然后将其编组为JSON,但这似乎不合适,因为您的每个REST方法都应该根据方法的功能生成不同的消息。此外,无论如何,这会强制您使用一些包装类进行响应。
所以,我想,最好在每种方法中手动将数据(以及状态和消息)包装到响应中
添加回答
举报
0/150
提交
取消
