介绍:其他文章里介绍了springboot+dubbo,这篇文章将简单的分享一个自己整理的springcloud+springboot+feign案例,初学者可以下载下来进行参考
一、项目结构
hucheng-springcloud-feign
|__ hucheng-springcloud-feign-common
|__ hucheng-springcloud-feign-eureka
|__ hucheng-springcloud-feign-rest
|__ hucheng-springcloud-feign-user-service
|__ hucheng-springcloud-feign-user-api
|__ hucheng-springcloud-feign-user-provider
二、根目录pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>hucheng-springcloud-feign-parent</name>
<modules>
<module>hucheng-springcloud-feign-common</module>
<module>hucheng-springcloud-feign-eureka</module>
<module>hucheng-springcloud-feign-user-service</module>
<module>hucheng-springcloud-feign-rest</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>
<properties>
<spring-cloud-version>Greenwich.RELEASE</spring-cloud-version>
<lombok-version>1.18.6</lombok-version>
<spring-core-version>5.1.5.RELEASE</spring-core-version>
<commons-lang3-version>3.8.1</commons-lang3-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>com.hucheng.common</groupId>
<artifactId>hucheng-springcloud-feign-common</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>com.hucheng.user.api</groupId>
<artifactId>hucheng-springcloud-feign-user-api</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-core-version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>$${commons-lang3-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
</project>
三、新建一个工具类公用项目hucheng-springcloud-feign-common
1.hucheng-springcloud-feign-common项目结构
|__src
|__main
| |__java
| |__com
| |__hucheng
| |__common
| |__exception
| |__page
| |__result
| |__utils
|__resources
2.pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.hucheng.common</groupId>
<artifactId>hucheng-springcloud-feign-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hucheng-springcloud-feign-common</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
</project>
3.异常信息类
package com.hucheng.common.exception;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-05
* @Description: 异常信息
**/
public class EduException extends Exception {
private static final long serialVersionUID = 1L;
public EduException() {
super(String.valueOf(100002));
}
public EduException(int code) {
super(String.valueOf(code));
}
public EduException(String msg) {
super(msg);
}
}
4.分页信息工具类
package com.hucheng.common.page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @Author: 凉白开不加冰
* @Date: 2019-04-18 15:03
* @Description: 分页
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonPager<T> implements Serializable {
private static final long serialVersionUID = -1220101004792874251L;
/**
* page.
*/
private PageParameter page;
/**
* data.
*/
private List<T> dataList;
}
package com.hucheng.common.page;
import lombok.Data;
import java.io.Serializable;
/**
* @Author: 凉白开不加冰
* @Date: 2019-04-18 15:04
* @Description: 分页
**/
@Data
public class PageParameter implements Serializable {
private static final long serialVersionUID = -8324693985921606090L;
private static final int DEFAULT_PAGE_SIZE = 10;
private int currentPage;
private int prePage;
private int nextPage;
private int pageSize;
private int offset;
private int totalPage;
private int totalCount;
public PageParameter() {
this.currentPage = 1;
this.pageSize = DEFAULT_PAGE_SIZE;
}
/**
* PageParameter.
*
* @param currentPage current page.
* @param pageSize page size.
*/
public PageParameter(final Integer currentPage, final Integer pageSize) {
this.currentPage = currentPage == null || currentPage <= 0 ? 1 : currentPage;
this.pageSize = pageSize == null || pageSize <= 0 ? DEFAULT_PAGE_SIZE : pageSize;
this.offset = (this.currentPage - 1) * this.pageSize;
}
/**
* PageParameter.
*
* @param currentPage current page.
* @param pageSize page size.
* @param totalCount total count.
*/
public PageParameter(final int currentPage, final int pageSize, final int totalCount) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.totalCount = totalCount;
this.totalPage = (int) Math.ceil((double) totalCount / (double) pageSize);
this.prePage = currentPage <= 1 ? 1 : currentPage - 1;
this.nextPage = currentPage >= this.totalPage ? this.totalPage : currentPage + 1;
}
}
5.API返回结果封装类
package com.hucheng.common.result;
import com.hucheng.common.utils.ReadPropertiesUtil;
import java.util.Properties;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-11
* @Description: 封装返回结果
**/
public class ReturnVO {
private static final Properties properties = ReadPropertiesUtil.getProperties();
/**
* 返回代码
*/
private Integer code;
/**
* 返回信息
*/
private String message;
/**
* 返回数据
*/
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
/**
* 返回成功无结果
*/
public ReturnVO() {
this.setCode(ReturnCode.SUCCESS.val());
this.setMessage(properties.getProperty(ReturnCode.SUCCESS.val() + ""));
}
/**
* 异常返回
*
* @param code
*/
public ReturnVO(Integer code) {
this.setCode(code);
this.setMessage(properties.getProperty(code + ""));
}
/**
* 异常返回
*
* @param message
*/
public ReturnVO(String message) {
this.setCode(ReturnCode.FAIL.val());
this.setMessage(message);
}
/**
* 默认值返回,默认返回正确的code和message
*
* @param data
*/
public ReturnVO(Object data) {
this.setCode(ReturnCode.SUCCESS.val());
this.setMessage(properties.getProperty(ReturnCode.SUCCESS.val() + ""));
this.setData(data);
}
/**
* 构造自定义的code,message,以及data
*
* @param code
* @param message
* @param data
*/
public ReturnVO(Integer code, String message, Object data) {
this.setCode(code);
this.setMessage(message);
this.setData(data);
}
@Override
public String toString() {
return "ReturnVO{" +
"code='" + code + '\'' +
", message='" + message + '\'' +
", data=" + data +
'}';
}
}
package com.hucheng.common.result;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-11
* @Description: 返回状态码
**/
public enum ReturnCode {
/**
* 操作成功
*/
SUCCESS(100000),
FAIL(100001);
ReturnCode(Integer value) {
this.val = value;
}
public Integer val() {
return val;
}
private Integer val;
}
6.读取属性文件工具类
package com.hucheng.common.utils;
import org.springframework.util.ResourceUtils;
import java.io.*;
import java.util.Properties;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-11
* @Description: 读取属性文件工具类
**/
public class ReadPropertiesUtil {
public static Properties getProperties() {
Properties properties = new Properties();
try {
File file = ResourceUtils.getFile("classpath:message.properties");
FileInputStream fileInputStream = new FileInputStream(file);
InputStream inputStream = new BufferedInputStream(fileInputStream);
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
}
7.返回码属性文件message.properties
100000=成功
100001=服务器错误
110000=用户名不能为空
四、新建注册中心项目hucheng-springcloud-feign-eureka
1.hucheng-springcloud-feign-eureka项目结果
|__src
|__main
| |__java
| |__com
| |__hucheng
| |__eureka
|__resources
2.pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.hucheng.eureka</groupId>
<artifactId>hucheng-springcloud-feign-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hucheng-springcloud-feign-eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.启动类
package com.hucheng.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Author: 凉白开不加冰
* @Date: 2019-06-13 14:33
* @Description: 注册中心
**/
@EnableEurekaServer
@SpringBootApplication
public class HuchengSpringcloudFeignEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(HuchengSpringcloudFeignEurekaApplication.class, args);
}
}
3.application.yml配置文件
server:
port: 8761
eureka:
client:
service-url:
defauleZone: http://localhost:8761/eureka/
fetch-registry: false
register-with-eureka: false
五、新建生产者项目hucheng-springcloud-feign-user-service
1.项目结构
|__hucheng-springcloud-feign-user-service
|__hucheng-springcloud-feign-user-api
|__hucheng-springcloud-feign-user-provider
2.根目录hucheng-springcloud-feign-user-service下pom文件内容
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-user-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<properties>
<skip_maven_deploy>true</skip_maven_deploy>
</properties>
<modules>
<module>hucheng-springcloud-feign-user-api</module>
<module>hucheng-springcloud-feign-user-provider</module>
</modules>
</project>
3.新建生产者hucheng-springcloud-feign-user-provider
1).项目结构
|__src
|__main
| |__java
| |__com
| |__hucheng
| |__user
| |__provider
| |__controller
| |__service
| |__impl
|__resources
2).pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<groupId>com.hucheng.user.provider</groupId>
<artifactId>hucheng-springcloud-feign-user-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hucheng-springcloud-feign-user-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.hucheng.user.api</groupId>
<artifactId>hucheng-springcloud-feign-user-api</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3).启动类
package com.hucheng.user.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @Author: 凉白开不加冰
* @Date: 2019-06-13 14:34
* @Description: 用户服务
**/
@EnableEurekaClient
@EnableFeignClients
@SpringBootApplication
public class HuchengSpringcloudFeignUserProviderApplication {
public static void main(String[] args) {
SpringApplication.run(HuchengSpringcloudFeignUserProviderApplication.class, args);
}
}
4).随便写个业务层UserService
package com.hucheng.user.provider.service;
import com.hucheng.user.api.query.UserQuery;
import com.hucheng.user.api.vo.UserVO;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-13
* @Description: 用户业务接口
**/
public interface UserService {
UserVO findUserByName(UserQuery userQuery);
}
package com.hucheng.user.provider.service.impl;
import com.hucheng.user.api.query.UserQuery;
import com.hucheng.user.api.vo.UserVO;
import com.hucheng.user.provider.service.UserService;
import org.springframework.stereotype.Service;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-13
* @Description: 用户业务实现类
**/
@Service
public class UserServiceImpl implements UserService{
@Override
public UserVO findUserByName(UserQuery userQuery) {
UserVO userVO = new UserVO();
userVO.setUsername("zhangsan");
userVO.setUserId(10000);
return userVO;
}
}
5).写个控制层UserController
package com.hucheng.user.provider.controller;
import com.hucheng.common.exception.EduException;
import com.hucheng.common.result.ReturnVO;
import com.hucheng.user.api.query.UserQuery;
import com.hucheng.user.api.vo.UserVO;
import com.hucheng.user.provider.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-13
* @Description: 用户Controller
**/
@RequestMapping("user")
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("findUserByName")
public UserVO findUserByName(UserQuery userQuery) throws EduException {
return userService.findUserByName(userQuery);
}
}
6).application.yml配置文件内容
server:
port: 8082
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: hucheng-springcloud-feign-user-provider
4.新建生产者feign api项目hucheng-springcloud-feign-user-api
1).项目结构
|__src
|__main
|__java
|__com
|__hucheng
|__user
|__api
|__dto
|__entity
|__feign
|__query
|__vo
2).pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<groupId>com.hucheng.user.api</groupId>
<artifactId>hucheng-springcloud-feign-user-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hucheng-springcloud-feign-user-api</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.hucheng.common</groupId>
<artifactId>hucheng-springcloud-feign-common</artifactId>
</dependency>
</dependencies>
</project>
3).feign客户端映射代码
package com.hucheng.user.api.feign;
import com.hucheng.user.api.query.UserQuery;
import com.hucheng.user.api.vo.UserVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-13
* @Description: 用户服务fei客户端
**/
@FeignClient(name = "hucheng-springcloud-feign-user-provider")
public interface UserFeignClient {
@RequestMapping(value = "/user/findUserByName", method = RequestMethod.POST)
UserVO findUserByName(UserQuery userQuery);
}
4).其他的bean参数
package com.hucheng.user.api.dto;
import lombok.Data;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-04-24
* @Description: 新增修改Controller传递参数
**/
@Data
public class UserDTO {
private Integer userId;
private String username;
private String password;
}
package com.hucheng.user.api.entity;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
@Data
public class BaseDO implements Serializable {
/**
* primary key.
*/
private String id;
/**
* created time.
*/
private Timestamp dateCreated;
/**
* updated time.
*/
private Timestamp dateUpdated;
}
package com.hucheng.user.api.entity;
import com.hucheng.user.api.dto.UserDTO;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.sql.Timestamp;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-04-24
* @Description: 持久层数据
**/
@Data
public class UserDO extends BaseDO{
private Integer userId;
private String username;
private String password;
public static UserDO buildUserDO(final UserDTO userDTO) {
if (userDTO != null) {
UserDO userDO = new UserDO();
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
if (StringUtils.isNotEmpty(userDTO.getUserId()+"")) {
userDO.setUserId(userDTO.getUserId());
userDO.setDateUpdated(currentTime);
}else{
userDO.setUsername(userDTO.getUsername());
userDO.setDateCreated(currentTime);
}
userDO.setPassword(userDTO.getPassword());
return userDO;
}
return null;
}
}
package com.hucheng.user.api.query;
import com.hucheng.common.page.PageParameter;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-04-24
* @Description: 查询数据
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserQuery implements Serializable {
private String username;
private String password;
/**
* page parameter.
*/
private PageParameter pageParameter;
}
package com.hucheng.user.api.vo;
import com.hucheng.user.api.entity.UserDO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.format.DateTimeFormatter;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-03
* @Description: 返回界面数据
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVO implements Serializable {
private Integer userId;
private String username;
private String password;
private String dateCreated;
private String dateUpdated;
public static UserVO buildUserVO(final UserDO userDO) {
if(userDO==null){
return null;
}
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return new UserVO(userDO.getUserId(),userDO.getUsername(),userDO.getPassword(),
dateTimeFormatter.format(userDO.getDateCreated().toLocalDateTime()),
dateTimeFormatter.format(userDO.getDateUpdated().toLocalDateTime()));
}
}
五、创建项目请求入口hucheng-springcloud-feign-rest
1.项目结构
|__src
|__main
| |__java
| |__com
| |__hucheng
| |__rest
| |__controller
|__resources
2.pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.hucheng</groupId>
<artifactId>hucheng-springcloud-feign-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.hucheng.rest</groupId>
<artifactId>hucheng-springcloud-feign-rest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hucheng-springcloud-feign-rest</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.hucheng.common</groupId>
<artifactId>hucheng-springcloud-feign-common</artifactId>
</dependency>
<dependency>
<groupId>com.hucheng.user.api</groupId>
<artifactId>hucheng-springcloud-feign-user-api</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.启动类
package com.hucheng.rest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @Author: 凉白开不加冰
* @Date: 2019-06-13 14:33
* @Description: 项目入口
**/
@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = {"com.hucheng.user.api.feign"})
public class HuchengSpringcloudFeignRestApplication {
public static void main(String[] args) {
SpringApplication.run(HuchengSpringcloudFeignRestApplication.class, args);
}
}
3.随便写个请求controller
package com.hucheng.rest.controller;
import com.hucheng.common.exception.EduException;
import com.hucheng.common.result.ReturnVO;
import com.hucheng.user.api.feign.UserFeignClient;
import com.hucheng.user.api.query.UserQuery;
import com.hucheng.user.api.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: 凉白开不加冰
* @Version: 0.0.1V
* @Date: 2019-06-13
* @Description: 用户Controller
**/
@RestController
@RequestMapping("user")
public class UserCrtl {
@Autowired
private UserFeignClient userFeignClient;
@PostMapping("findUserByName")
public ReturnVO findUserByName(UserQuery userQuery) throws EduException {
UserVO userVO = userFeignClient.findUserByName(userQuery);
return new ReturnVO(userVO);
}
}
4.application.yml配置内容
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: hucheng-springcloud-feign-rest
六、启动项目顺序
hucheng-springcloud-feign-eureka——>hucheng-springcloud-feign-user-provider——>hucheng-springcloud-feign-rest