我所有REST API中的JSON自定义响应,我可能不知道它叫什么?

所以问题就是这样,对于我的所有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中的所有响应中。


MMTTMM
浏览 679回答 3
3回答

杨魅力

它可以通过以下方式实现ResponseBodyAdvice:允许在执行一个@ResponseBody或一个ResponseEntity控制器方法之后但在使用一个主体写入正文之前自定义响应HttpMessageConverter。实现可以直接注册RequestMappingHandlerAdapter,ExceptionHandlerExceptionResolver或者更可能注释,@ControllerAdvice在这种情况下,它们将被两者自动检测。所以你可能有类似的东西:@ControllerAdvicepublic&nbsp;class&nbsp;MyResponseBodyAdvisor&nbsp;implements&nbsp;ResponseBodyAdvice<Object>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;supports(MethodParameter&nbsp;returnType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class<?&nbsp;extends&nbsp;HttpMessageConverter<?>>&nbsp;converterType)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;converterType.isAssignableFrom(MappingJackson2HttpMessageConverter.class); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Object&nbsp;beforeBodyWrite(Object&nbsp;body, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MethodParameter&nbsp;returnType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MediaType&nbsp;selectedContentType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class<?&nbsp;extends&nbsp;HttpMessageConverter<?>>&nbsp;selectedConverterType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerHttpRequest&nbsp;request, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerHttpResponse&nbsp;response)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyResponseWrapper&nbsp;wrapper&nbsp;=&nbsp;new&nbsp;MyResponseWrapper(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wrapper.setData(body); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;wrapper; &nbsp;&nbsp;&nbsp;&nbsp;}}哪里MyResponseWrapper是你用来包裹响应有效载荷类。

ABOUTYOU

您可以使用ResponseBodyAdvice<T>全局拦截响应POJO,然后将其编组为JSON,但这似乎不合适,因为您的每个REST方法都应该根据方法的功能生成不同的消息。此外,无论如何,这会强制您使用一些包装类进行响应。所以,我想,最好在每种方法中手动将数据(以及状态和消息)包装到响应中
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java