我遇到这个问题主要是因为@RequestBody、@RequestParam没处理好,要么处理得不对,要么根本没加
前端请求传Json对象则后端使用@RequestParam;
前端请求传Json对象的字符串则后端使用@RequestBody。
引用来自:https://blog.csdn.net/feiyst/article/details/88431621
Pass的组织方式
1、listoutUser方法
- 在Server端
@RestController
public class UserOutControl {
@Autowired
UserService userServive;
@RequestMapping(value = "/listoutUser",method = RequestMethod.GET)
public List<User> listoutuser(){
UserVo userVo = new UserVo();
List<User> listuser = userServive.queryuserbyvo(userVo);
return listuser;
}
}
- 在Client端
@FeignClient(value = "youfanshopuser")
public interface UserService {
@RequestMapping(value = "/listoutUser",method = RequestMethod.GET)
public List<User> listoutUser();
}
@Controller
public class userAction {
@Autowired
private UserService userService;
@RequestMapping(value = "/listuser",method = RequestMethod.GET)
public String listuser(Model model){
List<User> listuser = userService.listoutUser();
model.addAttribute("userlist",listuser);
return "listuser";
}
}
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>地址</td>
<td>手机号</td>
<td>qq</td>
<td>微信</td>
<td>邮箱</td>
<td>性别</td>
<td>生日</td>
<td>账号</td>
<td>操作</td>
</tr>
<tr th:each="user: ${userlist}">
<td th:text="${user.name}"></td>
<td th:text="${user.age}">2.41</td>
<td th:text="${user.address}">2.41</td>
<td th:text="${user.telphone}">2.41</td>
<td th:text="${user.qq}">2.41</td>
<td th:text="${user.weixin}">2.41</td>
<td th:text="${user.email}">2.41</td>
<td th:text="${user.sex}">2.41</td>
<td th:text="${user.birthday}">2.41</td>
<td th:text="${user.account}">2.41</td>
<td><a href="#" th:href="@{/findoutByUserid(id=${user.id})}">查看</a>|<a href="#" th:href="@{/toupdateUser(id=${user.id})}">修改</a>|<a href="#" th:href="@{/deloutByUserid(id=${user.id})}">删除</a></td>
</tr>
</table>
</body>
</html>
2、findoutByUserid方法
- 在Server端
@RestController
public class UserOutControl {
@Autowired
UserService userServive;
@RequestMapping(value = "/findoutByUserid",method = RequestMethod.GET)
public User findoutByUserid(@RequestParam int id){
User user = userServive.findByUserid(id);
return user;
}
}
- 在Client端
@FeignClient(value = "shopuser")
public interface UserService {
@RequestMapping(value = "/findoutByUserid",method = RequestMethod.GET)
public User findoutByUserid(@RequestParam(value = "id") int id);
}
@Controller
public class userAction {
@Autowired
private UserService userService;
@RequestMapping(value = "/findoutByUserid",method = RequestMethod.GET)
public String findoutByUserid(@RequestParam int id, Model model){
User user = userService.findoutByUserid(id);
model.addAttribute("user",user);
return "userview";
}
}
<table border="1">
<tr th:each="user: ${userlist}">
<td><a href="#" th:href="@{/findoutByUserid(id=${user.id})}">查看</a>|<a href="#" th:href="@{/toupdateUser(id=${user.id})}">修改</a>|<a href="#" th:href="@{/deloutByUserid(id=${user.id})}">删除</a></td>
</tr>
</table>
这么也可以看出,@RequestParam跟@RequestBody都是从前端 ’ 拿 ‘ 数据给后端,作用于数据的传递。
再接着往下看,
3、deloutByUserid
- 在Server端
@RestController
public class UserOutControl {
@Autowired
UserService userServive;
@RequestMapping(value = "/deloutByUserid",method = RequestMethod.GET)
public void deluserByid(@RequestParam int id){
userServive.deluserByid(id);
}
}
- 在Client端
@FeignClient(value = "shopuser")
public interface UserService {
@RequestMapping(value = "/deloutByUserid",method = RequestMethod.GET)
public void deluserByid(@RequestParam(value = "id") int id);
}
@Controller
public class userAction {
@Autowired
private UserService userService;
@RequestMapping(value = "/deloutByUserid",method = RequestMethod.GET)
public void deloutByUserid(@RequestParam int id){
userService.deluserByid(id);
}
}
<table border="1">
<tr th:each="user: ${userlist}">
<td><a href="#" th:href="@{/findoutByUserid(id=${user.id})}">查看</a>|<a href="#" th:href="@{/toupdateUser(id=${user.id})}">修改</a>|<a href="#" th:href="@{/deloutByUserid(id=${user.id})}">删除</a></td>
</tr>
</table>
4、updateoutUser方法
- 在Server端
@RestController
public class UserOutControl {
@Autowired
UserService userServive;
@RequestMapping(value = "/updateoutUser",method = RequestMethod.POST)
public void updateoutUser(@RequestBody User user){
userServive.updateUser(user);
}
}
- 在Client端
@FeignClient(value = "shopuser")
public interface UserService {
@RequestMapping(value = "/updateoutUser",method = RequestMethod.POST)
public void updateoutUser(@RequestBody User user);
}
@Controller
public class userAction {
@Autowired
private UserService userService;
@RequestMapping(value = "/toupdateUser",method = RequestMethod.GET)
public String toupdateUser(@RequestParam int id, Model model){
User user = userService.findoutByUserid(id);
model.addAttribute("user",user);
return "userupdate";
}
@RequestMapping(value = "/updateUser",method = RequestMethod.POST)
public void updateUser(User user){
userService.updateoutUser(user);
}
}
<table border="1">
<tr th:each="user: ${userlist}">
<td><a href="#" th:href="@{/findoutByUserid(id=${user.id})}">查看</a>|<a href="#" th:href="@{/toupdateUser(id=${user.id})}">修改</a>|<a href="#" th:href="@{/deloutByUserid(id=${user.id})}">删除</a></td>
</tr>
</table>
可知,传对象给后端用@RequestBody,其它的用@RequestParam。
至于updateoutUser这种前端界面
<table border="1">
<tr th:each="user: ${userlist}">
<td><a href="#" th:href="@{/findoutByUserid(id=${user.id})}">查看</a>|<a href="#" th:href="@{/toupdateUser(id=${user.id})}">修改</a>|<a href="#" th:href="@{/deloutByUserid(id=${user.id})}">删除</a></td>
</tr>
</table>
上,没有数据返回的,就不用。但是,
假如我把
- 在Server端
@RestController
public class UserOutControl {
@Autowired
UserService userServive;
@RequestMapping(value = "/updateoutUser",method = RequestMethod.POST)
public void updateoutUser(@RequestBody User user){
userServive.updateUser(user);
}
}
- 在Client端
@FeignClient(value = "shopuser")
public interface UserService {
@RequestMapping(value = "/updateoutUser",method = RequestMethod.POST)
public void updateoutUser(@RequestBody User user);
}
这两部分中的@RequestBody 去掉,测试结果是:运行正常,但数据库中的数据不受影响。
所以,我的结论是:从前端html页面传给程序需要@RequestBody 、@RequestParam,从一个服务传递给另一个服务也需要@RequestBody 、@RequestParam。