spring boot 中實現兼容不同的請求類型的方法。


  比如一個接口,既想實現請求參數是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<String,String[]> map= servletRequest.getParameterMap();

        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM