添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在开发的时候,需要调用第三方接口, 使用RestTemplate去调用,结果发现一直返回报错, 跟别人联调也说没有收到我发过去的请求参数.

String url = "http://api.xxx.xxx";
//模拟请求参数
Map map = new HashMap<>();
map.put("name","zgd");
map.put("age","18");
String result = restTemplate.getForObject(apiUrl,String.class,map );

发现一直拿不到name和age

最后发现, restTemplate发送Get请求, 需要将请求Url用占位符

String url = "http://api.xxx.xxx?name={name}&age={age}";

这样就可以了

2019/03/30 更新
我找到一种比较优雅的方式:

 public static void main(String[] args) {
    String url = "http://www.baidu.com";
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
    String url2 = builder.queryParam("name", "zgd").build().encode().toString();
    System.out.println("url2 = " + url2);//http://www.baidu.com?name=zgd
    Map<String,String> param = Maps.newHashMap();
    param.put("name","zzz");
    param.put("age","123");
    param.entrySet().stream().forEach(o -> builder.queryParam(o.getKey(),o.getValue()));
    String url3 = builder.build().encode().toString(); //http://www.baidu.com?name=zgd&name=zzz&age=123
    System.out.println("url3 = " + url3);
	//    ResponseEntity<String> rsp = restTemplate.getForEntity(url3, String.class);
                    在开发的时候,需要调用第三方接口, 使用RestTemplate去调用,结果发现一直返回报错, 跟别人联调也说没有收到我发过去的请求参数.String url = &amp;quot;http://api.xxx.xxx&amp;quot;;//模拟请求参数Map map = new HashMap&amp;amp;lt;&amp;amp;gt;();map.put(&amp;quot;name&amp;quot;,&amp;quot;zgd&amp;quot;);map.put(&am
				
Spring中RestTemplate get参数请求,接受不到请求参数处理。该方法可以自动组装参数 public class UrlParametersUtils { * 拼接get参数 * @param baseUrl baseUrl 例如 https://www.baidu.com/ * @param parameterMap parameter map public static URI handleUrlParameters(String
restTemplate发送https请求报错I/O error on POST request for “xxxx“: Remote host terminated the handshake解决
目前遇到一个对接需求,对方公司提供了一个接口,请求方法为GET,传参是在body中的json格式数据。 针对这个需求,在postman中进行测试,请求成功,后续需要用java进行接口调用。 首先,我们要了解 RestTemplate 请求方法和 HTTP 请求方法的对应关系。 spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。 2.添加配置文件 @Configuration public class RestTemplateConfig { * 没有实例化RestTemplate时,初始化R String url = "http://localhost:8081/aa"; //headers HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.add("api-version", "1.0"); //b... import com.alibaba.fastjson.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w... Map&amp;amp;amp;amp;amp;amp;lt;String, String&amp;amp;amp;amp;amp;amp;gt; params = new HashMap&amp;amp;amp;amp;amp;amp;lt;String, String&amp;amp;amp;amp;amp;amp;gt;(); params.put(&amp;amp;amp;amp;amp;quot;sex&amp;amp;am
可以使用RestTemplate的`getForObject()`或`getForEntity()`方法来发送GET请求参数可以在URL后面添加查询参数的方式。 例如,假设我们要发送一个GET请求到`https://example.com/api/users`,并参数`name=John&age=30`,可以这样写: ```java RestTemplate restTemplate = new RestTemplate(); String url = "https://example.com/api/users?name=John&age=30"; User[] users = restTemplate.getForObject(url, User[].class); 其中,`User`是我们定义的实体类,用于接收响应数据。 如果我们想要更灵活地构造URL,可以使用`UriComponentsBuilder`来构造有查询参数的URL: ```java RestTemplate restTemplate = new RestTemplate(); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://example.com/api/users") .queryParam("name", "John") .queryParam("age", 30); String url = builder.toUriString(); User[] users = restTemplate.getForObject(url, User[].class); 一定要坚持创作更多高质量博客哦, 小小红包, 以资鼓励, 更多创作活动请看: AI写作助手创作测评: https://activity.csdn.net/creatActivity?id=10450?utm_source=csdn_ai_ada_redpacket 【投稿可得勋章奖牌】「六一·致童年」让代码创造童话,共建快乐世界: https://activity.csdn.net/creatActivity?id=10452?utm_source=csdn_ai_ada_redpacket 程序员有哪些绝对不能踩的坑?: https://activity.csdn.net/creatActivity?id=10433?utm_source=csdn_ai_ada_redpacket 全部创作活动: https://mp.csdn.net/mp_blog/manage/creative?utm_source=csdn_ai_ada_redpacket 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低.