分享

SpringBoot发送Post请求

 樱花梦_张艺馨 2022-02-11

Controller:

com.penghaisoft.wcs.huakang.controllercom.alibaba.fastjson.JSONObjectlombok.extern.slf4j.org.springframework.boot.autoconfigure.condition.org.springframework.web.bind.annotation.org.springframework.web.bind.annotation.RequestMethodorg.springframework.web.bind.annotation.org.springframework.web.bind.annotation.java.util.Map(prefix = name = havingValue = )SLWCSController {
    @Autowired
public SLWCSService sLWCSService;
/**
 *功能描述: 测试
 */
@PostMapping("/httpService/test_zx")
public JSONObject testURL(@RequestParam Map map){
    System.out.println("测试!");
    net.sf.json.JSONObject jsonObject = sLWCSService.taskReceive(map);
    return jsonObject;
}
}

Service

public interface SLWCSService {

/**
* 任务接收接口
*/

public JSONObject taskReceive(Map<String,String> map);
}

Service实现类:

@Service("sLWCSService")
public class SLWCSServiceImpl implements SLWCSService {
    //速锐接口地址
    @Value(value ="${surui.surui-url}")
    private String SURUI_URL;

    @Autowired
    public PostResponseUtil postResponseUtil;

    @Override
    public JSONObject taskReceive(Map<String,String> map){
        //任务接收接口-路径
        String url =SURUI_URL+"/taskReceive";
        JSONObject jsonObject = selectJsonObject(map, url);
        return jsonObject;
    }

公共方法:

 
import net.sf.json.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;
import lombok.extern.slf4j.Slf4j;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Set;

/**
 * 发送请求公共方法
 */
@Slf4j
@Component
public class PostResponseUtil {
   
    /**
     * 把json数据转化为参数,为get请求和post请求stringentity的时候使用
     * @param argument 请求参数,json数据类型,map类型,可转化
     * @return 返回拼接参数后的地址
     */
    public  String changeJsonToArguments(JSONObject argument) {
        Set<String> keys = argument.keySet();
        for (String key : keys) {
            String value = argument.getString(key);
            argument.put(key, urlEncoderText(value));
        }
        String one = argument.toString();
        String two = "?" + one.substring(1, one.length() - 1).replace(",", "&").replace(":", "=").replace("\"", "");
        //时间戳
        one =two+"&timestamp="+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()).toString();
        return one;
    }
    /**
     * url进行转码,常用于网络请求
     * @param text 需要加密的文本
     * @return 返回加密后的文本
     */
    public String urlEncoderText(String text) {
        String result = "";
        try {
            result = java.net.URLEncoder.encode(text, "utf-8");
        } catch (Exception e) {
            System.out.println("数据格式错误!");
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 解析post请求的返回值
     * @param wcsResp 返回的JSON值
     * @return
     */
    public JSONObject jieXiWmsReturn(ResponseEntity<JSONObject> wcsResp) {
        //获取return的信息
        JSONObject jsonObject =null;
        if (wcsResp.getStatusCodeValue() != 200) {
            //调取接口失败
            log.info("调取接口失败!");
            jsonObject=null;
        } else {
            log.info("调WMS接口,响应成功!");
            //调取接口成功,获取返回数据
            JSONObject noticeResult = wcsResp.getBody();
            log.info("响应数据:"+noticeResult.toString());
            //String resultData = jsonObject.fromObject(noticeResult.getString("Response")).getString("return");
            //log.info("响应数据-return:"+resultData);
            //jsonObject = jsonObject.fromObject(resultData);
            jsonObject =noticeResult;
        }
        return jsonObject;
    }

    /**
     * post请求 
     * @param map 请求体
     * @return
     */
    public ResponseEntity<JSONObject> getJsonObjectEntity(String url,Map<String, String> map) {
        //采用JSONObject或者实体类传递参数
        //创建一个响应头
        HttpHeaders headers = new HttpHeaders();
        //设置请求资源或数据类型:application/json  headers.setContentType(MediaType.APPLICATION_JSON)
        headers.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());//指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序.
        HttpEntity<Map> request = new HttpEntity<Map>(map, headers);
        log.info("调用WMS接口-开始:");
        //调用WMS接口
        ResponseEntity<JSONObject> wcsResp = new RestTemplate().postForEntity(url, request, JSONObject.class);
        log.info("调用WMS接口-结束,wcsResp:"+wcsResp);
        return wcsResp;
    }
    
    /**
     * 发送请求并解析JSON-欧尚
     * @param map 请求体
     * @param url 请求路径
     * @return 返回数据
     */
    @ResponseBody
    public JSONObject selectJsonObject(Map<String, String> map, String url) {
        //post请求
        ResponseEntity<String> wcsResp= getJsonEntity(url, map);

        System.out.println("post请求 返回数据:"+wcsResp);
        //解析
        JSONObject jsonObject = jieXiWmsReturn(wcsResp);
        return jsonObject;
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多