博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot 中实现兼容不同的请求类型的方法。
阅读量:6368 次
发布时间:2019-06-23

本文共 2213 字,大约阅读时间需要 7 分钟。

  比如一个接口,既想实现请求参数是application/json,又想实现form提交,改怎么做呢?用postman去测试,发现不可能做到两全其美。

  我有一个方法,就是不用requestbody,也可以实现json解析,首先是新建一个包装类,这个类可以重复读inputstream里面的东西。

  如果加了requestbody,就无法用form提交,如果去掉requestbody 那么就无法获取到json里面的值,因为全是null.

class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {    private final byte[] body;    public BodyReaderHttpServletRequestWrapper(HttpServletRequest request)            throws IOException {        super(request);     //编码默认iso-8859-1        body = StreamUtil.readBytes(request.getReader(), "utf-8");    }    @Override    public BufferedReader getReader() throws IOException {        return new BufferedReader(new InputStreamReader(getInputStream()));    }    @Override    public ServletInputStream getInputStream() throws IOException {        final ByteArrayInputStream bais = new ByteArrayInputStream(body);        return new ServletInputStream() {            @Override            public int read() throws IOException {                return bais.read();            }            @Override            public boolean isFinished() {                return false;            }            @Override            public boolean isReady() {                return false;            }            @Override            public void setReadListener(ReadListener listener) {            }        };    }}

  然后再从inputstream里面拿东西就OK拉

public static JSONObject receivePost(HttpServletRequest request) throws IOException, UnsupportedEncodingException {        // 读取请求内容        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));        String line = null;        StringBuilder sb = new StringBuilder();        while ((line = br.readLine()) != null) {            sb.append(line);        }        //将json字符串转换为json对象        JSONObject json=JSONObject.parseObject(sb.toString());        return json;    }

  最后在action里面做判断就OK了,大功告成。

if(servletRequest.getContentType().equals("application/json"))        {            servletRequest= new BodyReaderHttpServletRequestWrapper( servletRequest);            JSONObject d= receivePost(servletRequest);        }        else        {           Map
map= servletRequest.getParameterMap(); }

  

转载地址:http://xoema.baihongyu.com/

你可能感兴趣的文章
squid via检测转发循环
查看>>
计算分页
查看>>
iptables 做nat路由器脚本
查看>>
数据结构(C语言版)第三章:栈和队列
查看>>
Stopping and/or Restarting an embedded Jetty in...
查看>>
Oracle存储过程中的数据集输入参数
查看>>
vsftp 配置
查看>>
VCSA中配置时间和时区,实测至6.5适用
查看>>
高并发IM系统架构优化实践
查看>>
产品经理教你玩转阿里云负载均衡SLB系列(一):快速入门--什么是负载均衡
查看>>
有关linux--进程组、会话、守护进程详解
查看>>
我的友情链接
查看>>
monkeyrunner运行Python脚本来检查apk渠道和验证是否可以调用微信
查看>>
github获得SSH Key解决Permission denied (publickey)问题
查看>>
用java代码编写Oracle存储过程
查看>>
APACHE转发
查看>>
android-market-api
查看>>
解決 yum update錯誤:[Errno -1] Metadata file does not match checksum
查看>>
ASP.NET(C#)Excel导入Dataset的出现数据值丢失问题
查看>>
我的友情链接
查看>>