我正在尝试使用spring建立登录系统。问题是如果用户名不在数据库中,我想发送一个不同的状态码,如果用户名不在数据库中,但是密码错误,我想发送一个不同的状态码。因为在我的前端,我将根据状态代码使用不同的警报来通知用户。
我不能使用HttpStatus.NOT_ACCEPTABLE
之类的东西,因为我的控制器正在返回一个User(我的自定义类)。它将返回User或null。
@GetMapping("/users")
public User userLogin(@RequestParam String username,@RequestParam String password) {
User user = userService.findByUsername(username);
if(user==null) {
return null;
}
if(user.getPassword().equals(password)) {
return user;
} else {
return null;
}
}
在这里,我尝试更改状态,同时返回null。
答案 0 :(得分:1)
Spring 5引入了ResponseStatusException类。我们可以创建一个提供HttpStatus并提供原因和原因的实例:
@GetMapping(value = "/{id}") public Foo findById(@PathVariable("id") Long id, HttpServletResponse response) {
try {
Foo resourceById = RestPreconditions.checkFound(service.findOne(id));
eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
return resourceById;
}
catch (MyResourceNotFoundException exc) {
throw new ResponseStatusException(
HttpStatus.NOT_FOUND, "Foo Not Found", exc);
} }
也许这是您要寻找的?
https://www.baeldung.com/exception-handling-for-rest-with-spring#controlleradvice中的详细信息
答案 1 :(得分:1)
您可以返回 ResponseEntity 以满足您的要求
@GetMapping("/users")
public ResponseEntity<User> userLogin(@RequestParam String username,@RequestParam String password) {
User user = userService.findByUsername(username);
if(user==null) {
return new ResponseEntity<>(null,HttpStatus.NOT_FOUND);
}
if(user.getPassword().equals(password)) {
return new ResponseEntity<>(user,HttpStatus.OK);
} else {
return new ResponseEntity<>(null,HttpStatus.FORBIDDEN);
}
}