springcloud+springboot+feign一个简单的案例

介绍:其他文章里介绍了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

七、项目下载地址

https://download.csdn.net/download/qq_21082615/11240583

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值