springboot pushes messages to the specified interface

A description

This case uses http post request to push messages to the specified interface.

The sender needs to pay attention here:

2. Operation case

2.1 Client (push side)

2.1.1 Engineering structure

2.1.2 pom file

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpcore</artifactId>
      <version>4.4.10</version>
    </dependency>
    <!-- 阿里fastjson包JSON转换-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.6</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.7</version>
    </dependency>
  </dependencies>

2.1.3 controller

package com.ljf.spring.boot.demo.controller;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ljf.spring.boot.demo.http.HttpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: UserController
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/03/11 22:36:37 
 * @Version: V1.0
 **/
@RestController
public class UserController {
    @Autowired
    private HttpService httpService;
    @RequestMapping("/push")
    public void Login(@RequestParam(value = "date", required = false) String date,
                        @RequestParam(value = "type", required = false) String type,
                        @RequestParam(value = "xt", required = false) String[] xt){
        System.out.println("进入controller了,第四方!!!!!");
        String v="[{\"DeviceName\":\"悬臂堆料机\",\"deviceCode\":\"TCNY_JEK_DQLJ_2_001\",\"measurePointList\":[{\"measurePointCode\":\"EQCQ_TCNY_NK_SLD121_M1_RUN\",\"measurePointName\":\"堆料臂回转角度\",\"timeStamp\":1615513986828,\"angleVal\":1.0},{\"measurePointCode\":\"EQCQ_TCNY_NK_SLD121_M2_RUN\",\"measurePointName\":\"堆料皮带运行指示\",\"timeStamp\":1615513986828,\"angleVal\":1.0}]},{\"DeviceName\":\"俯仰机构\",\"deviceCode\":\"TCNY_JEK_DQLJ_2_014\",\"measurePointList\":[{\"measurePointCode\":\"EQCQ_TCNY_NK_SLD121_M3_RUN\",\"measurePointName\":\"取料倾角\",\"timeStamp\":1615513986828,\"angleVal\":1.0},{\"measurePointCode\":\"EQCQ_TCNY_NK_SLD122_M1_RUN\",\"measurePointName\":\" 取料回转角\",\"timeStamp\":1615513986828,\"angleVal\":1.0}]},{\"DeviceName\":\"刮板取料机\",\"deviceCode\":\"TCNY_JEK_DQLJ_2_006\",\"measurePointList\":[{\"measurePointCode\":\"EQCQ_TCNY_NK_SLD122_M2_RUN\",\"measurePointName\":\"刮板运行指示\",\"timeStamp\":1615513987828,\"angleVal\":1.0}]}]";
       // String j= JSON.toJSONString(v);
       // System.out.println("j:"+j);
        v="{\"data\":"+v+"}";
        System.out.println("v:"+v);
        httpService.sendMsg("http://localhost:8080/pulldata",v);

    }
}

2.1.4 http的post

1. Preparation of HttpClientBuilder

package com.ljf.spring.boot.demo.http;

import org.apache.http.Header;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.message.BasicHeader;

/**
 * 默认的请求参数
 * @Author LiYangYang
 */
public class HttpClientBuilder {

    private static final Header[] headers = new Header[]{
            new BasicHeader("charset", "utf-8"),
            new BasicHeader("Content-Type", "application/json")
    };
    /**
     * 获得一个默认的请求配置
     * @return RequestConfig
     */
    public static RequestConfig getDefaultRequestConfig(){
        return RequestConfig.custom()
                .setConnectionRequestTimeout(2000)
                .setConnectTimeout(2000)
                .build();
    }

    /**
     * 简单头信息获取
     * @return 请求头数组
     */
    public static Header[] getHeaders(){
        return  headers;
    }
}

2.HttpService

package com.ljf.spring.boot.demo.http;


import com.alibaba.fastjson.JSON;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.IOException;

/**
 * 数据推送服务类
 * 推送json格式数据
 */
@Service("localHttpService")
public class HttpService {

    private static final Logger logger = LoggerFactory.getLogger(HttpService.class);
    /**
     * 发送数据到指定的地址
     * @param url 发送地址
     * @param body 发送内容
     */
    public void sendMsg(String url, Object body){
        RequestConfig defaultRequestConfig = RequestConfig.custom()
                .setSocketTimeout(2000)
                .setConnectTimeout(2000)
                .setConnectionRequestTimeout(5000)
                .build();
        CloseableHttpClient httpClient = HttpClients.custom()
                .setDefaultRequestConfig(defaultRequestConfig)
                .build();
        //        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost post = new HttpPost(url);
        post.setHeaders(HttpClientBuilder.getHeaders());
        post.setConfig(HttpClientBuilder.getDefaultRequestConfig());
        HttpEntity entry = new StringEntity(JSON.toJSONString(body) ,"UTF-8");
        post.setEntity(entry);
        CloseableHttpResponse response;
        try {
            response = httpClient.execute(post);
            response.close();
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("发送数据失败, {}", e.getMessage());
        }
    }
    /**
     * 发送数据到指定的地址
     * @param url 发送地址
     * @param body 发送内容
     */
    public void sendMsg(String url, String  body){
        RequestConfig defaultRequestConfig = RequestConfig.custom()
                .setSocketTimeout(2000)
                .setConnectTimeout(2000)
                .setConnectionRequestTimeout(5000)
                .build();
        CloseableHttpClient httpClient = HttpClients.custom()
                .setDefaultRequestConfig(defaultRequestConfig)
                .build();
        //        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost post = new HttpPost(url);
        post.setHeaders(HttpClientBuilder.getHeaders());
        post.setConfig(HttpClientBuilder.getDefaultRequestConfig());
        HttpEntity entry = new StringEntity(body, "UTF-8");
        post.setEntity(entry);
        CloseableHttpResponse response;
        try {
            response = httpClient.execute(post);
            response.close();
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("发送数据失败, {}", e.getMessage());
        }
    }
}

2.1.5 Startup class

package com.ljf.spring.boot.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class ClientApp
{
    public static void main( String[] args ){
        SpringApplication.run(ClientApp.class);
        System.out.println("=======================客户启动完成!!!");
    }
}

2.2 Server (pull end)

2.2.1 Project structure

2.2.2 Pom file configuration

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- swagger 的jar-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- swaggger ui的jar -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- 阿里fastjson包JSON转换-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
    </dependencies>

2.2.3 Controller reception

package com.ljf.spring.boot.demo.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.JsonObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.Map;

/**
 * @ClassName: UserController
 * @Description: TODO
 * @Author: liujianfu
 * @Date: 2021/03/11 17:33:38 
 * @Version: V1.0
 **/
@RestController
@Api(value = "调用用户信息controller")  //用在类上,说明该类的作用。
public class UserController {

    @RequestMapping("/pulldata")
    public void pullData(@RequestBody JSONObject obj) throws IOException {
      // JSONArray msg= JSONObject.parseArray(obj.toString());
       System.out.println("结束到的数据:"+obj);
        Map infoMap = new ObjectMapper().readValue(obj.toString(), Map.class); //json转换成map
        System.out.println("infoMap:"+infoMap);
      //  System.out.println("msg:"+msg);
    }

}

2.2.4 Startup

package com.ljf.spring.boot.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class ServerApp
{
    public static void main( String[] args ){
        SpringApplication.run(ServerApp.class);
        System.out.println("=======================服务启动完成!!!");
    }
}

2.3 Simulate sending data

Client access:

The server receives:

Guess you like

Origin blog.csdn.net/u011066470/article/details/114730412