吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 965|回复: 3
收起左侧

[已解决] spring boot 问题求解答

[复制链接]
公子语凉 发表于 2021-1-1 21:50
遇到一个 spring boot 的问题想要实现统一结果集输出: 我使用了:ResponseBodyAdvice
但是这边有个问题就是 String 的话:使用 HttpMessageConverter会报类型转换异常,所以这里做了兼容处理
但是问题又来了,前台返回不了处理后的JSON,我debug 发现代码返回来一个modelAndView  
[Java] 纯文本查看 复制代码
import com.biu.web.R;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;


@RestControllerAdvice
public class BiuResponseAdvice implements ResponseBodyAdvice<Object> {

    public static final String BIUREQUESTMAPPING = "BIUREQUESTMAPPING";

    /**
     * 是否是指定
     *
     * [url=home.php?mod=space&uid=952169]@Param[/url] methodParameter
     * @param aClass
     * @return
     */
    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        // ---------------------------------- 第三步:start ----------------------------------
        // 获取 request
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        // 获取 第一步 设置的属性
        String attribute = (String) servletRequestAttributes.getRequest().getAttribute(BIUREQUESTMAPPING);
        // 如果属性相等就执行 beforeBodyWrite
        return BIUREQUESTMAPPING.equals(attribute);
    }

    /**
     * 如果 supports 返回 true 就执行
     * 封装 返回体 为 R 类型
     *
     * @param o
     * @param methodParameter
     * @param mediaType
     * @param aClass
     * @param serverHttpRequest
     * @param serverHttpResponse
     * @return
     */
    @SneakyThrows
    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        if (methodParameter.getParameterType().equals(String.class)) {
            try {
                R r = R.OK().DATA(o);
                String jsonStr = new ObjectMapper().writeValueAsString(r);
                System.out.println(jsonStr);
                return jsonStr;
            } catch (JsonProcessingException e) {
                throw e;
            }
        } else if (o instanceof R) {
            return o;
        } else {
            return R.OK().DATA(o);
        }
        // ---------------------------------- 第三步:end ----------------------------------
    }
}

免费评分

参与人数 1热心值 +1 收起 理由
yanyyuan + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 公子语凉 发表于 2021-1-1 21:51
想要请问一下,这边应该如何返回 正确的JSON格式的 内容呢
 楼主| 公子语凉 发表于 2021-1-1 22:02
hh,我自己百度到了,分享下吧:https://blog.csdn.net/qq_37170583/article/details/107470337
嘻嘻
yuqingyao123 发表于 2021-1-1 22:08
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表