所以问题就是这样,对于我的所有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
提交
取消