15

Java POST请求案例

 3 years ago
source link: http://www.cnblogs.com/weigy/p/13867969.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<直接上代码>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Person(对象)

public class Person {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

PersonReq(请求参数对象)

public class PersonReq {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

DemoService(业务类)

package com.demo;

import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class DemoService {
    /**
     * 获取列表
     *
     * @param personReq 对象参数
     * @return
     */
    public List<Person> personList(PersonReq personReq) {
        List<Person> list = new ArrayList<>();
        Person person = new Person();
        person.setAge(personReq.getAge());
        person.setName(personReq.getName());
        Person person1 = new Person();
        person1.setAge(20);
        person1.setName("2诗");
        list.add(person);
        list.add(person1);
        return list;
    }
}

DemoController(控制类)

package com.demo;

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/demo")
public class DemoController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    DemoService demo;

    @PostMapping("/list")
    public List<Person> getPerson(@RequestBody PersonReq personReq) {
        List<Person> people = demo.personList(personReq);
        logger.info("list:{}", JSON.toJSONString(people));
        return people;
    }
}

Application (启动类)

启动项目,然后下一步,外部 就可以开始调接口了

package com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableScheduling
@EnableSwagger2
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

HttpClients(工具类)

package com.demo;

import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * HTTP 工具类
 */
public class HttpClients {
    /**
     * 发送POST请求
     *
     * @param url   请求URL
     * @param param 请求参数
     * @return
     */
    private String sendPost(String url, String param) {


        return null;
    }

    public static String sendPost(String url, String request, String ContentType) {
        String result = "";

        try {
            //存储请求
            PrintWriter out;

            //存储接口返回的response
            BufferedReader in;

            // 获取访问地址
            //得到网络访问对象java.net.HttpURLConnection
            URL realUrl = new URL(url);

            //设置请求参数,以流的形式连接
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

            //设置http的请求头
            conn.setRequestProperty("accept", "*/*");

            //设置请求的Contenttype
            if (ContentType == null || ContentType.equals("")) {
                if (isJson(request)) {
                    conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
                } else {
                    if (url.toLowerCase().contains(".asmx")) {
                        conn.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
                    } else {
                        conn.setRequestProperty("Content-Type", "application/xml;charset=utf-8");
                    }
                }
            } else {
                conn.setRequestProperty("Content-Type", ContentType);
            }

            //特殊处理:如果是1.0的请求则进一步具体设定setRequestProperty,并对xml格式做优化
            if (url.toLowerCase().contains(".asmx")) {
                if (url.toLowerCase().contains("datacomparews")) {
                    conn.setRequestProperty("SOAPAction", "http://tempuri.org/DataTableCompare");
                    String Xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                            "<soap:Body>";
                    Xml += request.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "");
                    Xml += "</soap:Body></soap:Envelope>";
                    request = Xml;
                } else {
                    String Xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                            "<soap:Body><Request xmlns=\"http://tempuri.org/\"><requestXML>" + "<![CDATA[";
                    Xml += request.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "");
                    Xml += "]]></requestXML></Request></soap:Body></soap:Envelope>";
                    request = Xml;
                    conn.setRequestProperty("SOAPAction", "http://tempuri.org/Request");
                }
            }

            //keep-alive 发出的请求建议服务器端保留连接,这样下次向同一个服务器发请求时可以走同一个连接
            conn.setRequestProperty("connection", "Keep-Alive");

            //设置请求的浏览器相关属性
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            //设定接受的返回流字节码为UTF-8
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("Charset", "utf-8");

            //设置超时时间,如果未设置超时时间,但是访问超时了就会一直卡在这里
            conn.setConnectTimeout(50000 * 12);
            conn.setReadTimeout(50000 * 12);

            //设置是否向HttpURLConnection输出,默认为false,发送post请求的不啊必须设置为true
            conn.setDoOutput(true);

            //设置是否从httpUrlConnection读入,默认为true,不设置也可以
            conn.setDoInput(true);

            //处理输入请求 ,设置请求正文,即要提交的数据
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));

            // 写入参数到请求中
            out.print(request);

            //flush输出流的缓冲
            out.flush();

            //处理输出接口,远程对象变为可用
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));

            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            result = e.getMessage();
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 判断字符串是不是json格式
     *
     * @param request
     * @return
     */
    private static boolean isJson(String request) {
        try {
            JSONObject.parseObject(request);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

Demo1Controller(外部调用类)

package com.demo;

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/demo1")
public class Demo1Controller {
    private static final Logger logger = LoggerFactory.getLogger(Demo1Controller.class);

    @PostMapping("/list")
    public String getPerson1() {
        PersonReq personReq = new PersonReq();
        personReq.setAge(10);
        personReq.setName("1诗");
        String url = "http://localhost:8080/demo/list";
        String result = HttpClients.sendPost(url, JSON.toJSONString(personReq), "");
        logger.info(" getPerson1 list:{}", result);
        return result;
    }

     //mian方法测试
    public static void main(String[] args) {
        PersonReq personReq = new PersonReq();
        personReq.setAge(10);
        personReq.setName("1诗");
        String url = "http://localhost:8080/demo/list";
        String result = HttpClients.sendPost(url, JSON.toJSONString(personReq), "");
        logger.info("result:{}", result);
    }
}

RjmMFnq.png!mobile

<<<<<<<<<<<<<<<OK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK