相关文章推荐
有胆有识的斑马  ·  REST Clients :: ...·  3 天前    · 
笑点低的人字拖  ·  Please login as the ...·  1 年前    · 
豪气的打火机  ·  java - Attempt to ...·  1 年前    · 
大力的冰棍  ·  初探DLL注入 - 知乎·  1 年前    · 

下面是之前的内容:更正一下,这个传递的map,里面的泛型不能是数组,类似于Map<String,Object[]>这样就不行,自己写一个util,将Map<String,Object[]> 转换为Map<String,List<Object>>,接口那边接受的类型也是一样的,这样就可以进行复杂类型参数的传递。

原因是什么呢,因为传递的参数格式已经定义了,是json类型的,所以要传递过去的参数必须是能够转化为json的,数组类型的数据,转换json的时候就会报错,not support type[java.lang.Object].........

RestTemplate post请求传递map。

之前根据网上的说法,

1:传递的MultiValueMap,但是在请求中用MultiValueMap接收,会报参数类型mismatch;

2:传递的MultiValueMap,但是在请求中用Map接收,没有报错,但是收到的map是空,不是null,只是一个空map;

自己研究:

直接传map就行,调接口传的map中的泛型和接口收参数的泛型一致(例如Map<String,String>,接口中的参数也得是Map<String,String>)

headers要设置contenttype的话,设置为application/json;然后接口处加一个@RequestBody就ok;

这个是我的接口

  @PostMapping("/insert/test")
  public Integer insertInto(@RequestBody Map<String, String> map) {
    System.out.println(map.toString());
    System.out.println(map.size());
    return map.size();

然后是调用部分

HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON_UTF8);//设置参数类型和编码
                Map<String,String> map1 = new HashMap<>();//建立简单的String,String的map
                map1.put("email", "first.last@example.com");
                map1.put("email1", "first.last@example.com1");
                map1.put("email2", "first.last@example.com2");
                HttpEntity<Map<String,String>> request1 = new HttpEntity<>(map1, headers);//包装到HttpEntity
                //postForEntity  -》 直接传递map参数
                ResponseEntity<Integer> respo1 = restTemplate.postForEntity("http://localhost:8895/insert/test", map1, Integer.class);
                //postForEntity  -》 传递httpentity参数
                ResponseEntity<Integer> respo2 = restTemplate.postForEntity("http://localhost:8895/insert/test",request1 , Integer.class);
                //postForObject  -》 直接传递map参数
                Integer respo3= restTemplate.postForObject("http://localhost:8895/insert/test", map1, Integer.class);
                //postForObject  -》 传递httpentity参数
                Integer respo4= restTemplate.postForObject("http://localhost:8895/insert/test", request1, Integer.class);

直接传递httpentity类型的话,resttemplate会判断是否是httpentity类型,是的话,传递到下一层进行解析;

直接传递map参数,resttemplate解析不是httpentity,会把map包装到httpentity里面,和我们代码做得是一样的操作,这里的默认参数类型应该也是application/json;

接收的话,就是在参数哪里加一个@requestbody。

就这样。搞了一天,试过各种转,原来直接传就行,别忘了参数类型和@requestbody

下面是之前的内容:更正一下,这个传递的map,里面的泛型不能是数组,类似于Map&amp;lt;String,Object[]&amp;gt;这样就不行,自己写一个util,将Map&amp;lt;String,Object[]&amp;gt; 转换为Map&amp;lt;String,List&amp;lt;Object&amp;gt;&amp;gt;,接口那边接受的类型也是一样的,这样就可以进行复杂类型参数的传递。原因是什么呢,因为传递的参数格式已经定...
在Spring Boot中,可以使用RestTemplate发送POST请求。以下是具体的实现步骤:在Spring Boot项目中添加RestTemplate的依赖。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star...
Unity画面滤镜优化着色器Post Processing Profiles 3.1 所支持的Unity版本:2017.1.0 及以上版本 Post processing 3 profiles for PC/Mac and Mobile 21 different settings for Post Processing V3. With the help of these settings you could get realistic graphics just in few clicks. Effects: UE, Cry, Realistic, Lomo, Crazy
@Autowired private RestTemplate restTemplate; //通过restTemplate post传递map方法 接口返回一个int类型 public void longRangeTest(){ HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMed...
当使用RestTemplate进行http请求时,的确很方便,但是当需要进行post请求时遇到了坑 1POST传递参数 :采用 LinkedMultiValueMap ,不能使用HashMap String url = 'http://posturl'; MultiValueMap<String, String> map= new LinkedMultiValueMap&lt......
有个项目接口需要送一个x-www-form-urlencoded的参数,key=data,value={json的map} 一开始用一个字符串拼接,把字符串拼接为如下样式: String param = "data= "aa": "123456789", "bb": "11", "cc": "梁宝宝" 然后直接把这个字符串当做参数过去: RestTemplate restTemplate = RestTemplateUtil.getInstance("utf
最近因为公司需求,需要ajax post请求并跳转界面,网上搜了一下资料,差不多都是用[removed].href来处理,但是在请求页面的地址栏中会暴露请求的参数,这是不安全的。 $.post( {method:regist,userName:$nameEle.val(),email:$emailEle.val(),password:$passwordEle.val()}, function(data) { //注册成功页面跳转, [removed].href =../yiliaoqixie/login.html?name=+$nameEle.val
异常抛出之后,程序后面的代码就执行不到了,无法进行后面的代码执行。实际的业务开发中,有的时候我们更期望的结果是:不管你服务端是超时了还是服务不存在,我们都应该获得最终的请求结果(HTTP请求结果状态400、500),而不是获得一个抛出的异常。 二、源码解析-默认实现 首先我要说一个结论:RestTemplate请求结果异常是可以自定义处理的。在开始进行自定义的异常处理逻辑之前,我们有必要看一下异常处理的默认实现。也就是:为什么会产生上面小节提到的现象? ResponseErrorHandler是RestTemplate请求结果的异常处理器接口 o接口的第一个方法hasError用于判断HttpResponse是否是异常响应(通过状态码) o接口的第二个方法handleError用于处理异常响应结果(非200状态码段) DefaultResponseErrorHandler是ResponseErrorHandler的默认实现
import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.ht RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求, 可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方...
RestTemplatepost请求实用分析 1、最近在做相关平台对接工作。对接第一步需要在后端完成认证,拿到对方平台的access_token。由于对方文档不是很详细,根据认证需要的参数进行了多种尝试。顺带学习一下RestTemplatepost请求的各种姿势。记录在此,以便查看。 2、往后端发post请求一般分为两种, 一种是普通的表单提交(Content-Type: application/x-www-form-urlencoded)。 另一种是JSON提交(Content-Type: a
RestTemplate是Spring框架提供的一个HTTP客户端工具,可以用于发送HTTP请求。其中,post请求是一种常见的请求方式,可以用于向服务器提交数据。使用RestTemplate发送post请求的步骤如下: 1. 创建RestTemplate对象。 2. 创建请求头和请求体。 3. 发送请求并获取响应。 4. 处理响应数据。 具体实现可以参考以下代码: RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); JSONObject requestBody = new JSONObject(); requestBody.put("name", "张三"); requestBody.put("age", 20); HttpEntity<String> requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); String url = "http://localhost:808/user"; ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, requestEntity, String.class); String responseBody = responseEntity.getBody(); 其中,第一行代码创建了一个RestTemplate对象;第二行代码创建了请求头,并设置Content-Type为application/json;第三行代码创建了请求体,使用JSONObject封装了请求参数;第四行代码创建了HttpEntity对象,将请求头和请求体封装在一起;第五行代码设置了请求的URL;第六行代码发送post请求,并获取响应;第七行代码从响应中获取响应体。
laolvbig: Configuration : new org.apache.hadoop.conf.Configuration(); 用于配置hadoop环境变量:hadoop.security.authentication = kerberos principalName: 认证keytab文件的用户名,例:kafka@QQBM.COM keytabPath: keytab文件的存放路径 krb5ConfPath:krb5文件的路径,一般linux在/etc下,也可以自己定义目录进行存放 loginConfigPath:kafka认证需要用到的文件,里面会配置一些server和client信息