所以問題就是這樣,對于我的所有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
提交
取消