今天在使用@RequestBody后,测试返回请求失败,询问后找到原因回答如下
有几个问题需要修正:
-
@RequestBody
注解使用错误:@RequestBody
用于将HTTP请求的主体内容解析为对象。在你的代码中,userName
和password
是普通的字符串,而不是整个请求体。因此,不应该对它们使用@RequestBody
。通常,@RequestBody
用于解析JSON或表单数据。修改建议:
你可以改为使用
@RequestParam
来接收查询参数,或者将用户的登录信息作为一个对象来处理。 -
推荐使用DTO来封装参数: 更好的做法是创建一个DTO(数据传输对象)类来封装用户名和密码。
修改后的代码:
方案 1:使用 @RequestParam
java
复制代码
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public Result loginController(@RequestParam String userName, @RequestParam String password) { User user = userService.login(userName, password); if (user != null) { return Result.success(user); } else { return Result.error("用户名或密码错误"); } } }
此方案假设你发送的是POST
请求,并且参数是通过URL查询参数发送的。
方案 2:使用 @RequestBody
和 DTO
如果你想发送JSON请求体,可以封装用户名和密码到一个DTO对象中。
java
复制代码
// DTO 类 public class LoginRequestDTO { private String userName; private String password; // Getters and Setters }
java
复制代码
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public Result loginController(@RequestBody LoginRequestDTO loginRequest) { User user = userService.login(loginRequest.getUserName(), loginRequest.getPassword()); if (user != null) { return Result.success(user); } else { return Result.error("用户名或密码错误"); } } }
JSON请求示例:
json
复制代码
{ "userName": "admin", "password": "123456" }
这样,你可以通过POST请求发送JSON数据,并且在控制器中接收和处理登录信息。