diff --git a/lab-42/lab-42-demo02/pom.xml b/lab-42/lab-42-demo02/pom.xml
new file mode 100644
index 000000000..065629430
--- /dev/null
+++ b/lab-42/lab-42-demo02/pom.xml
@@ -0,0 +1,46 @@
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.2.RELEASE
+
+
+ 4.0.0
+
+ lab-42-demo02
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+ mysql
+ mysql-connector-java
+ 5.1.46
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.h2database
+ h2
+ test
+
+
+
+
diff --git a/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/Application.java b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/Application.java
new file mode 100644
index 000000000..b96d4d52a
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/Application.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springboot.lab23.testdemo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/controller/UserController.java b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/controller/UserController.java
new file mode 100644
index 000000000..db349d20c
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/controller/UserController.java
@@ -0,0 +1,33 @@
+package cn.iocoder.springboot.lab23.testdemo.controller;
+
+import cn.iocoder.springboot.lab23.testdemo.dataobject.UserDO;
+import cn.iocoder.springboot.lab23.testdemo.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 用户 Controller
+ */
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ /**
+ * 获得指定用户编号的用户
+ *
+ * @param id 用户编号
+ * @return 用户
+ */
+ @GetMapping("/get") // URL 修改成 /get
+ public UserDO get(@RequestParam("id") Integer id) {
+ // 查询并返回用户
+ return userService.get(id);
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/dao/UserDao.java b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/dao/UserDao.java
new file mode 100644
index 000000000..7134114d1
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/dao/UserDao.java
@@ -0,0 +1,21 @@
+package cn.iocoder.springboot.lab23.testdemo.dao;
+
+import cn.iocoder.springboot.lab23.testdemo.dataobject.UserDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class UserDao {
+
+ @Autowired
+ private JdbcTemplate template;
+
+ public UserDO selectById(Integer id) {
+ return template.queryForObject("SELECT id, username, password FROM t_user WHERE id = ?",
+ new BeanPropertyRowMapper<>(UserDO.class), // 结果转换成对应的对象
+ id);
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/dataobject/UserDO.java b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/dataobject/UserDO.java
new file mode 100644
index 000000000..d22dbf842
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/dataobject/UserDO.java
@@ -0,0 +1,50 @@
+package cn.iocoder.springboot.lab23.testdemo.dataobject;
+
+/**
+ * 用户 DO
+ */
+public class UserDO {
+
+ /**
+ * 用户编号
+ */
+ private Integer id;
+ /**
+ * 账号
+ */
+ private String username;
+ /**
+ * 密码(明文)
+ *
+ * ps:生产环境下,千万不要明文噢
+ */
+ private String password;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public UserDO setId(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public UserDO setUsername(String username) {
+ this.username = username;
+ return this;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public UserDO setPassword(String password) {
+ this.password = password;
+ return this;
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/service/UserService.java b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/service/UserService.java
new file mode 100644
index 000000000..19416253e
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/main/java/cn/iocoder/springboot/lab23/testdemo/service/UserService.java
@@ -0,0 +1,29 @@
+package cn.iocoder.springboot.lab23.testdemo.service;
+
+import cn.iocoder.springboot.lab23.testdemo.dao.UserDao;
+import cn.iocoder.springboot.lab23.testdemo.dataobject.UserDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserService {
+
+ @Autowired
+ private UserDao userDao;
+
+ public UserDO get(Integer id) {
+ return userDao.selectById(id);
+ }
+
+ public boolean exists(String username) {
+ return true;
+ }
+
+ public Integer add(String username, String password) {
+ if (exists(username)) {
+ return null;
+ }
+ return 1;
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/main/resources/application.yaml b/lab-42/lab-42-demo02/src/main/resources/application.yaml
new file mode 100644
index 000000000..0af15034a
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/main/resources/application.yaml
@@ -0,0 +1,7 @@
+spring:
+ # datasource 数据源配置内容
+ datasource:
+ url: jdbc:mysql://127.0.0.1:3306/lab-39-mysql?useSSL=false&useUnicode=true&characterEncoding=UTF-8
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password:
diff --git a/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/controller/UserControllerTest.java b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/controller/UserControllerTest.java
new file mode 100644
index 000000000..f9eb0fc05
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/controller/UserControllerTest.java
@@ -0,0 +1,58 @@
+package cn.iocoder.springboot.lab23.testdemo.controller;
+
+import cn.iocoder.springboot.lab23.testdemo.dataobject.UserDO;
+import cn.iocoder.springboot.lab23.testdemo.service.UserService;
+import org.hamcrest.core.IsEqual;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+
+/**
+ * UserController 单元测试
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@AutoConfigureMockMvc
+public class UserControllerTest {
+
+ @Autowired
+ private MockMvc mvc;
+
+ @MockBean
+ private UserService userService;
+
+ @Test
+ public void testGet() throws Exception {
+ // Mock UserService 的 get 方法
+ Mockito.when(userService.get(1)).thenReturn(
+ new UserDO().setId(1).setUsername("username:1").setPassword("password:1"));
+
+ // 查询用户
+ ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.get("/user/get?id=1"));
+
+ // 校验响应状态码
+ resultActions.andExpect(MockMvcResultMatchers.status().isOk()); // 响应状态码 200
+
+ // 校验响应内容方式一:直接全部匹配
+ resultActions.andExpect(MockMvcResultMatchers.content().json("{\n" +
+ " \"id\": 1,\n" +
+ " \"username\": \"username:1\",\n" +
+ " \"password\": \"password:1\"\n" +
+ "}", true)); // 响应结果
+
+ // 校验响应内容方式二:逐个字段匹配
+ resultActions.andExpect(MockMvcResultMatchers.jsonPath("id", IsEqual.equalTo(1)));
+ resultActions.andExpect(MockMvcResultMatchers.jsonPath("username", IsEqual.equalTo("username:1")));
+ resultActions.andExpect(MockMvcResultMatchers.jsonPath("password", IsEqual.equalTo("password:1")));
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/dao/UserDaoTest.java b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/dao/UserDaoTest.java
new file mode 100644
index 000000000..081da10e6
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/dao/UserDaoTest.java
@@ -0,0 +1,33 @@
+package cn.iocoder.springboot.lab23.testdemo.dao;
+
+import cn.iocoder.springboot.lab23.testdemo.dataobject.UserDO;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class UserDaoTest {
+
+ @Autowired
+ private UserDao userDao;
+
+ @Test
+ @Sql(scripts = "/sql/create_tables.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(statements = "INSERT INTO `t_user`(`id`, `username`, `password`) VALUES (1, 'username:1', 'password:1');", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ public void testSelectById() {
+ // 查询用户
+ UserDO user = userDao.selectById(1);
+
+ // 校验结果
+ Assert.assertEquals("编号不匹配", 1, (int) user.getId());
+ Assert.assertEquals("用户名不匹配", "username:1", user.getUsername());
+ Assert.assertEquals("密码不匹配", "password:1", user.getPassword());
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/package-info.java b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/package-info.java
new file mode 100644
index 000000000..ae8ba9d6c
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.springboot.lab23.testdemo;
diff --git a/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/service/UserServiceTest.java b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/service/UserServiceTest.java
new file mode 100644
index 000000000..25b9d120a
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/service/UserServiceTest.java
@@ -0,0 +1,39 @@
+package cn.iocoder.springboot.lab23.testdemo.service;
+
+import cn.iocoder.springboot.lab23.testdemo.dao.UserDao;
+import cn.iocoder.springboot.lab23.testdemo.dataobject.UserDO;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class UserServiceTest {
+
+ @MockBean
+ private UserDao userDao;
+
+ @Autowired
+ private UserService userService;
+
+ @Test
+ public void testGet() {
+ // Mock UserDao 的 selectById 方法
+ Mockito.when(userDao.selectById(1)).thenReturn(
+ new UserDO().setId(1).setUsername("username:1").setPassword("password:1"));
+
+ // 查询用户
+ UserDO user = userService.get(1);
+
+ // 校验结果
+ Assert.assertEquals("编号不匹配", 1, (int) user.getId());
+ Assert.assertEquals("用户名不匹配", "username:1", user.getUsername());
+ Assert.assertEquals("密码不匹配", "password:1", user.getPassword());
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/service/UserServiceTest2.java b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/service/UserServiceTest2.java
new file mode 100644
index 000000000..d1f7f62b8
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/java/cn/iocoder/springboot/lab23/testdemo/service/UserServiceTest2.java
@@ -0,0 +1,37 @@
+package cn.iocoder.springboot.lab23.testdemo.service;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class UserServiceTest2 {
+
+ @SpyBean
+ private UserService userService;
+
+ @Test
+ public void testAddSuccess() {
+ System.out.println("testAddSuccess");
+ // Mock UserService 的 exists 方法
+ Mockito.when(userService.exists("username")).thenReturn(
+ false);
+
+ Assert.assertNotNull("注册返回为 null,注册失败",
+ userService.add("username", "password"));
+ }
+
+ @Test
+ public void testAddFailure() {
+ System.out.println("testAddFailure");
+
+ Assert.assertNull("注册返回为 null,注册失败",
+ userService.add("username", "password"));
+ }
+
+}
diff --git a/lab-42/lab-42-demo02/src/test/resources/application.yaml b/lab-42/lab-42-demo02/src/test/resources/application.yaml
new file mode 100644
index 000000000..382674c46
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/resources/application.yaml
@@ -0,0 +1,7 @@
+spring:
+ # datasource 数据源配置内容
+ datasource:
+ url: jdbc:h2:mem:testdb
+ driver-class-name: org.h2.Driver
+ username: sa
+ password:
diff --git a/lab-42/lab-42-demo02/src/test/resources/sql/clean.sql b/lab-42/lab-42-demo02/src/test/resources/sql/clean.sql
new file mode 100644
index 000000000..be125207d
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/resources/sql/clean.sql
@@ -0,0 +1 @@
+DROP TABLE `t_user`
diff --git a/lab-42/lab-42-demo02/src/test/resources/sql/create_tables.sql b/lab-42/lab-42-demo02/src/test/resources/sql/create_tables.sql
new file mode 100644
index 000000000..82c92d7e2
--- /dev/null
+++ b/lab-42/lab-42-demo02/src/test/resources/sql/create_tables.sql
@@ -0,0 +1,5 @@
+CREATE TABLE `t_user` (
+ `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
+ `username` VARCHAR(64) NOT NULL COMMENT '账号',
+ `password` VARCHAR(64) NOT NULL COMMENT '密码'
+);
diff --git a/lab-42/pom.xml b/lab-42/pom.xml
index 3518bd6b5..5501dc837 100644
--- a/lab-42/pom.xml
+++ b/lab-42/pom.xml
@@ -13,6 +13,7 @@
pom
lab-42-demo01
+ lab-42-demo02
diff --git a/lab-58/lab-58-feign-demo/pom.xml b/lab-58/lab-58-feign-demo/pom.xml
new file mode 100644
index 000000000..e4b222f73
--- /dev/null
+++ b/lab-58/lab-58-feign-demo/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+ lab-58
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-58-feign-demo
+
+
+ 1.8
+ 1.8
+ 2.2.4.RELEASE
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ io.github.openfeign
+ feign-core
+ 11.0
+
+
+ io.github.openfeign
+ feign-gson
+ 11.0
+
+
+
+
diff --git a/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/FeignDemoApplication.java b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/FeignDemoApplication.java
new file mode 100644
index 000000000..99ab6cd1a
--- /dev/null
+++ b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/FeignDemoApplication.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springboot.lab58.feigndemo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class FeignDemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(FeignDemoApplication.class, args);
+ }
+
+}
diff --git a/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/config/FeignConfig.java b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/config/FeignConfig.java
new file mode 100644
index 000000000..f0f261f72
--- /dev/null
+++ b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/config/FeignConfig.java
@@ -0,0 +1,19 @@
+package cn.iocoder.springboot.lab58.feigndemo.config;
+
+import cn.iocoder.springboot.lab58.feigndemo.feign.UserServiceFeignClient;
+import feign.Feign;
+import feign.gson.GsonDecoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class FeignConfig {
+
+ @Bean
+ public UserServiceFeignClient userServiceFeignClient() {
+ return Feign.builder()
+ .decoder(new GsonDecoder())
+ .target(UserServiceFeignClient.class, "http://127.0.0.1:18080"); // 目标地址
+ }
+
+}
diff --git a/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/controller/DemoController.java b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/controller/DemoController.java
new file mode 100644
index 000000000..61a5f4d1b
--- /dev/null
+++ b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/controller/DemoController.java
@@ -0,0 +1,41 @@
+package cn.iocoder.springboot.lab58.feigndemo.controller;
+
+import cn.iocoder.springboot.lab58.feigndemo.feign.UserServiceFeignClient;
+import cn.iocoder.springboot.lab58.feigndemo.feign.response.UserResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/demo")
+public class DemoController {
+
+ @Autowired
+ private UserServiceFeignClient userServiceFeignClient;
+
+ @GetMapping("/test01")
+ public UserResponse test01() {
+ return userServiceFeignClient.get(1);
+// System.out.println("编号:" + user.getId());
+// System.out.println("昵称:" + user.getName());
+// System.out.println("性别:" + user.getGender());
+ }
+
+ @GetMapping("/test02A")
+ public List test02A() {
+ return userServiceFeignClient.list("你猜", 1);
+ }
+
+ @GetMapping("/test02B")
+ public List test02B() {
+ Map queryMap = new HashMap<>();
+ queryMap.put("name", "昵称");
+ return userServiceFeignClient.list(queryMap);
+ }
+
+}
diff --git a/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/feign/UserServiceFeignClient.java b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/feign/UserServiceFeignClient.java
new file mode 100644
index 000000000..687e4ead4
--- /dev/null
+++ b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/feign/UserServiceFeignClient.java
@@ -0,0 +1,24 @@
+package cn.iocoder.springboot.lab58.feigndemo.feign;
+
+import cn.iocoder.springboot.lab58.feigndemo.feign.response.UserResponse;
+import feign.Param;
+import feign.QueryMap;
+import feign.RequestLine;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserServiceFeignClient {
+
+ // 获得用户详情
+ @RequestLine("GET /user/get?id={id}")
+ UserResponse get(@Param("id") Integer id);
+
+ @RequestLine("GET /user/list?name={name}&gender={gender}")
+ List list(@Param("name") String name,
+ @Param("gender") Integer gender);
+
+ @RequestLine("GET /user/list")
+ List list(@QueryMap Map queryMap);
+
+}
diff --git a/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/feign/response/UserResponse.java b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/feign/response/UserResponse.java
new file mode 100644
index 000000000..8d47e8dd5
--- /dev/null
+++ b/lab-58/lab-58-feign-demo/src/main/java/cn/iocoder/springboot/lab58/feigndemo/feign/response/UserResponse.java
@@ -0,0 +1,36 @@
+package cn.iocoder.springboot.lab58.feigndemo.feign.response;
+
+public class UserResponse {
+
+ private Integer id;
+ private String name;
+ private Integer gender;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public UserResponse setId(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public UserResponse setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public Integer getGender() {
+ return gender;
+ }
+
+ public UserResponse setGender(Integer gender) {
+ this.gender = gender;
+ return this;
+ }
+
+}
diff --git a/lab-58/lab-58-user-service/src/main/java/cn/iocoder/springboot/lab58/userservice/controller/UserController.java b/lab-58/lab-58-user-service/src/main/java/cn/iocoder/springboot/lab58/userservice/controller/UserController.java
index cb27e25c8..7b61783f7 100644
--- a/lab-58/lab-58-user-service/src/main/java/cn/iocoder/springboot/lab58/userservice/controller/UserController.java
+++ b/lab-58/lab-58-user-service/src/main/java/cn/iocoder/springboot/lab58/userservice/controller/UserController.java
@@ -20,12 +20,12 @@ public UserResponse get(@RequestParam("id") Integer id) {
}
@GetMapping("/list")
- public List list(@RequestParam("name") String name,
- @RequestParam("gender") Integer gender) {
+ public List list(@RequestParam(value = "name", required = false) String name,
+ @RequestParam(value = "gender", required = false) Integer gender) {
List users = new ArrayList<>();
for (int id = 1; id <= 3; id++) {
users.add(new UserResponse().setId(id)
- .setName(name).setGender(gender));
+ .setName(name + "_" + id).setGender(gender));
}
return users;
}
diff --git a/lab-58/pom.xml b/lab-58/pom.xml
index fcd0d796a..a194fa03b 100644
--- a/lab-58/pom.xml
+++ b/lab-58/pom.xml
@@ -14,6 +14,7 @@
lab-58-user-service
+ lab-58-feign-demo
diff --git a/pom.xml b/pom.xml
index 12ce18eec..63969ff06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
-
+ lab-42