为什么我在某个公司已经成功的app网络请求框架,到了新公司的后端可能无法对接成功?

业务场景:每次在新公司对接接口,拿出以前已经写好的app 网络请求框架可能并不能成功。调试发现。app端明明发送了请求。服务端反馈一直没有发送。这是一个困扰我多年的问题。苦于自己只会app部分。并不了解后端的代码 。只能一点点尝试。

现在接触了后端才发现原来是后端的锅。他们采用获取 请求体里面的数据的方式的不同。导致前端的请求方式的不同。后端代码如下。解释 在注释里:

package com.demo.serlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

/**
 * Servlet implementation class SecondSerlet
 * 一个服务端接口接受get和post 请求的小测试。并且解决了中文乱码的问题
 */
@WebServlet("/ceshi")
public class SecondSerlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    /**
     * @see HttpServlet#HttpServlet()
     */
//    public SecondSerlet() {
//        super();
//        // TODO Auto-generated constructor stub
//    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     * 网络请求的get方法,不需要过多解释
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("get"+request);
//        response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        Map<String,String>map=new HashMap();
        map.put("name","这是GET返回的数据");
        out.write(JSON.toJSONString(map));
        out.flush();
        out.close();
    }
//    /**
//     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
//     * POST请求方法1: 获取请求体里面的数据 通过 request.getParameter()方式获取,这种方式是传统的
//     *  Content-Type=application/x-www-form-urlencoded方式。客户端需要使用form表单方式请求数据
//     */
//    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
//            throws ServletException, IOException {
//        // TODO Auto-generated method stub
//        request.setCharacterEncoding("UTF-8");
//         String userName = request.getParameter("name");
//         System.out.println("userName是"+userName);
//        response.setContentType("text/html;charset=utf-8");
//        PrintWriter out=response.getWriter();
//        Map<String,String>map=new HashMap();
//        map.put("name","这是POST返回的数据"+userName);
//        out.write(JSON.toJSONString(map));
//        out.flush();
//        out.close();
//    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     *  POST请求方法2:获取请求体里面的数据 通过request.getInputStream()方式获取,这种方式通过
     *  Content-Type=multipart/form-data方式。客户端需要使用FormData表单方式请求数据
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        Map<String,String>map=new HashMap();
        map.put("name","我收到了"+ReadAsChars2(request));
        out.write(JSON.toJSONString(map));
        out.flush();
        out.close();
    }
/*
 * 通过流的方式读取请求体里面的数据,并且解决掉 中文乱码的 问题
 */
    public  String  ReadAsChars2(HttpServletRequest request){
    StringBuilder buffer = new StringBuilder();
    BufferedReader reader=null;
    try{
     request.setCharacterEncoding("UTF-8");
     reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
     String line=null;
     while((line = reader.readLine())!=null){
      buffer.append(line);
           }
    }catch(Exception e){
     e.printStackTrace();
    }finally{
     if(null!=reader){
      try {
       reader.close();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }
    return  buffer.toString();
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值