resttemplate get请求参数_使用 Spring 提供的 restTemplate 完成 Http 服务消费

2RestTemplate 介绍

RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访

问远程 Http 服务的方法,能够大大提高客户端的编写效率。

3 服务消费者实现

3.1 业务需求说明

实现:通过红包系统访问订单系统,获得某个用户的订单信息,派发红包.

6031c698d5af3c0a7282e51695301d3c.png

red-sys:服务的消费者

Order-sys:服务的提供者

red-sys 给 order-sys 的 Controller 发送 http 请求

3.2 创建 red-sys 项目

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.bjsxt.red.consumer</groupId>
 <artifactId>red-sys</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>war</packaging>


 <properties>
<!-- spring 依赖 -->
<spring.version>4.3.18.RELEASE</spring.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
 <!-- jsp 相关依赖 -->
 <!-- servlet 依赖 -->
 <!-- jstl 依赖 -->
 <dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
 <!-- springmvc 依赖-->
 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>${jackson.version}</version>
</dependency>
 </dependencies>
 <build>
 <finalName>red</finalName>
 <plugins>
<!-- 配置 Tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/red</path>
<port>8080</port>
</configuration>
</plugin>
 </plugins>
 </build>
</project>

3.3 拷贝 Order 订单实体类

拷贝 order-sys 中的实体类

3.4 创建 RedController 类

package com.bjsxt.controller;

import java.util.Arrays;
import java.util.List;
import java.util.Map.Entry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;
import com.bjsxt.domain.Order;
@Controller
public class RedController {
//注入由 spring 提供的 RestTemplate 对象
@Autowired
private RestTemplate restTemplate;
/****
* 发送远程的 http 请求,消费 http 服务
* 获得订单对象的集合
*/
@RequestMapping("/loadOrderList01")
@ResponseBody
public List<Order> loadOrderList01(String uid){
//发送远程 http 请求的 url
String url="http://localhost:7070/order/loadOrderList02";
//发送到远程服务的参数
MultiValueMap<String, Object> params=new LinkedMultiValueMap();
params.add("uid", uid);
//通过 restTemplate 对象发送 post 请求
Order[] orders = restTemplate.postForObject(url, params, Order[].class);
return Arrays.asList(orders);
}
/****
* 发送远程的 http 请求,消费 http 服务
* 获得订单对象的集合
*/
@RequestMapping("/loadOrderList02")
@ResponseBody
public List<Order> loadOrderList02(String uid){
//发送远程 http 请求的 url
String url="http://localhost:7070/order/loadOrderList02";
//发送到远程服务的参数
MultiValueMap<String, Object> params=new LinkedMultiValueMap();
params.add("uid", uid);
//通过 restTemplate 对象发送 post 请求
ResponseEntity<Order[]> entity = restTemplate.postForEntity(url, params,
Order[].class);
//restTemplate.getForObject(url, responseType)
//restTemplate.getForEntity(url, responseType);
//获得响应头信息
HttpHeaders headers = entity.getHeaders();
for(Entry<String, List<String>> e:headers.entrySet()){
System.out.println(e.getKey()+"--------------"+e.getValue());
}
//获得响应状态吗
int status = entity.getStatusCodeValue();
System.out.println(status);
//获得远程服务的响应体
Order[] orders =entity.getBody();
return Arrays.asList(orders);
}
}

3.5 配置 springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 <!-- 扫描 controller -->
 <context:component-scan base-package="com.bjsxt.controller" />

 <mvc:annotation-driven></mvc:annotation-driven>

 <!-- 实例化 RestTemplate 对象 -->
 <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"></bean>
</beans>

3.6 配置 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>red</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/favicon.ico</url-pattern>
</servlet-mapping>
<!-- 以监听器的方式启动 spring 容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定 spring 的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<!-- POST 请求的乱码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定编码方式 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<!-- 映射 filter -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- springmvc 的 servlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定 springmvc 的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 让 springmvc 随系统启动而启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

3.7 启动 order-sys

3.8 启动访问 red-sys

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值