为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2019-04-25 18:15:48
所以问题就是这样,对于我的所有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

实现可以直接注册RequestMappingHandlerAdapterExceptionHandlerExceptionResolver或者更可能注释,@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是你用来包裹响应有效载荷类。


查看完整回答
反对 回复 2019-05-15
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您可以使用ResponseBodyAdvice<T>全局拦截响应POJO,然后将其编组为JSON,但这似乎不合适,因为您的每个REST方法都应该根据方法的功能生成不同的消息。此外,无论如何,这会强制您使用一些包装类进行响应。

所以,我想,最好在每种方法中手动将数据(以及状态和消息)包装到响应中


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 674 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信