RestTemplate put请求,参数传递不进去
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RestTemplate put请求,参数传递不进去相关的知识,希望对你有一定的参考价值。
代码如下:
@Override
public ResponseEntity<String> updateSelective(FromUser fromUser)
String url = "http://192.168.3.222:8888/api/v1/fromUser/updateSelective";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type); //避免直接传入实体类而发生异常
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
HttpEntity<String> formEntity = new HttpEntity<String>(JsonMapperUtils.getInstance().toJson(fromUser), headers);
return restTemplate.exchange(url, HttpMethod.PUT, formEntity, String.class);
此时参数传递不进去,全是null,可是如果把HttpMethod.PUT改成HttpMethod.POST就可以传递进去。请教各位put请求的写法。
RestTemplate put请求,参数传递不进去是设置错误造成的,解决方法为:
1、安装requests包,测试是否安装了requests,在命令行进入Python交互环境。
2、退出python交互环境,在命令行输入pip install requests。
3、安装完成后,进入python交互环境,输入命令测试get访问方法。
4、输入命令测试post访问方法r = requests.post('http://httpbin.org/post')print (r.text)。
5、输入命令测试put访问方法r = requests.put('http://httpbin.org/put')print (r.text)。
参考技术A 般处理要么是api丑陋一点,将方法也写在url里,要么是和null的回答一样,一些开发框架提供了input[name="_method"]的方式来实现,如express。<form method="post" action="/">
<input type="hidden" name="_method" value="put" />
<input type="text" name="user[name]" />
<input type="text" name="user[email]" />
<input type="submit" value="Submit" />
</form>
app.put('/', function()
console.log(req.body.user);
res.redirect('back');
);
可以使用 RestTemplate PUT 传递我自己的对象
【中文标题】可以使用 RestTemplate PUT 传递我自己的对象【英文标题】:Can pass my own object with RestTemplate PUT 【发布时间】:2016-04-14 07:55:15 【问题描述】:我想构建一个小型 RESTful 服务,使用我创建的类 (MyObject) 的对象发送 PUT 请求,并获得仅包含状态的响应。
我的控制者:
@RestController
public class MyControler
@RequestMapping(path = "/blabla/id", method = RequestMethod.PUT)
@ResponseBody
public ResponseEntity<String> putMethod (@PathVariable("id") Long id,
@RequestBody MyObject t)
/*todo*/
return new ResponseEntity<String>(HttpStatus.OK);
我的测试应用
@SpringBootApplication
public class App
public String httpPut(String urlStr)
MyObject myObject = new MyObject(p,p,....);
URI url = null;
HttpEntity<MyObject> requestEntity;
RestTemplate rest = new RestTemplate();
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON);
headers.setAccept(list);
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Content-Type", "application/json");
requestEntity = new HttpEntity<Transaction>(t, headers);
ResponseEntity<String> response =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
return response.getStatusCode().getValue();
我收到了HttpClientErrorException: 400 Bad Request
我的错误在哪里?我想要的是让 Spring 自动序列化 MyObject。 MyObject 类正在实现可序列化。
我错过了什么?
【问题讨论】:
!!!上面发布的代码中的一个错误:requestEntity = new HttpEntityMyObject
类作为返回值,但您什么也没有发送(如果您发送的是 Transaction
对象,而不是 MyObject
。)。你也做了很多,Spring boot 已经配置了你只需要注入它们并创建一个RestTemplate
的转换器。所以你的代码是复杂和错误的。
【参考方案1】:
也许你做的太多了?
您是否尝试通过邮递员或类似的方式将对象作为 json?如果有,反应如何?
尽管如此,我还是创建了一个通过 Springs RestTemplate 使用服务的最小示例。
这是获取自定义对象并通过 RestTemplate 放置自定义对象所需的全部代码
public void doTransfer()
String url = "http://localhost:8090/greetings";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Greeting> greeting = restTemplate.getForEntity(url, Greeting.class);
LOGGER.info(greeting.getBody().getValue());
Greeting myGreeting = new Greeting();
myGreeting.setValue("Hey ho!");
HttpEntity<Greeting> entity = new HttpEntity<Greeting>(myGreeting);
restTemplate.exchange(url, HttpMethod.PUT, entity, Greeting.class);
我在Github上提供了一个示例项目,其中包含一个发送者(可能不是一个好名字.. 它是带有问候端点的项目)和一个接收者(使用问候端点的项目)
【讨论】:
【参考方案2】:尝试这样做:
ResponseEntity<MyObject> responseSerialized =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
【讨论】:
以上是关于RestTemplate put请求,参数传递不进去的主要内容,如果未能解决你的问题,请参考以下文章
Java RestTemplate post请求传递参数遇到的坑
使用RestTemplate在代码内调用POST请求的参数乱码问题