SpringMVC RestTemplate使用

之前写了一个用httpClient测试http服务,最近发现Spring中提供了一个RestTemplate,超级好用,测试了一下返回结果与之前的一样。

package com.demo.http;

import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

public class RestTemplateClient {

public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
//form.add("salary", "2,500.00");

String response = restTemplate.postForObject(
"http://demo/user/1", form, String.class);
System.out.println("response:\n" + response);
}

}

ps:返回值是JSON,测试的时候报了如下异常

Exception in thread "main" java.lang.NoSuchMethodError: org.codehaus.jackson.map.type.TypeFactory.type(Ljava/lang/reflect/Type;)Lorg/codehaus/jackson/type/JavaType;
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.getJavaType(MappingJacksonHttpMessageConverter.java:114)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.canRead(MappingJacksonHttpMessageConverter.java:91)
at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:506)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:557)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:436)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:279)
at demo.RestTemplateClient.main(RestTemplateClient.java:17)

原因是JACKSON的jar包版本太低,换成高版本没有任何问题

参考资料:
https://github.com/itstamen/rop/wiki/Five-minutes-quick-start
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过使用Spring框架提供的RestTemplate类,Spring MVC可以方便地向其他服务器发送HTTP请求,包括SSE(Server-Sent Events)请求。 SSE是一种服务器推送技术,允许服务器向客户端(通常是Web浏览器)发送流式数据。在Spring中,使用RestTemplate发送SSE请求通常涉及以下步骤: 1. 创建RestTemplate实例:首先,需要创建一个RestTemplate的Bean,以便在整个Spring MVC应用程序中重用。 2. 设置请求头:对于SSE,通常需要设置适当的HTTP头,如`Accept`头设置为`text/event-stream`,以及`Cache-Control`头设置为`no-cache`,表明这是一个事件流。 3. 发送GET请求:使用RestTemplate的`getForObject`或`exchange`方法发送一个GET请求到目标URL。对于SSE,URL通常是SSE服务的端点。 4. 处理返回的`ResponseEntity`:`exchange`方法会返回一个`ResponseEntity`对象,可以从中获取响应头和响应体。SSE响应通常是一个输入流。 5. 读取数据流:通过响应体(InputStream)读取服务器发送的数据。这通常涉及到循环读取输入流中的数据,并处理每个从服务器发送过来的事件。 下面是一个简单的示例代码,展示如何使用RestTemplate发送SSE请求: ```java RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "text/event-stream"); headers.set("Cache-Control", "no-cache"); HttpEntity<String> entity = new HttpEntity<String>(headers); ResponseEntity<InputStreamResource> response = restTemplate.exchange( "http://other-server.com/sse-endpoint", HttpMethod.GET, entity, InputStreamResource.class); try (InputStream inputStream = response.getBody()) { // 读取输入流中的数据 // ... } ``` 请注意,实际使用中,服务器必须支持SSE并且正确配置,客户端才能正确接收数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值