如何解决Spring Boot ResponseEntity 不操纵 HTTP 响应
我在处理响应实体异常时遇到问题。正如所见,我的响应实体错误并未改变 HTTP 响应。
我的代码
public ResponseEntity<User> retriveUser(@PathVariable int id){
Optional<User> foundUser;
foundUser= userRepo.findById(id);
if(foundUser.get()==null) {
return new ResponseEntity<>(foundUser.get(),HttpStatus.HttpStatus.NOT_FOUND);
}
else {
return new ResponseEntity<>(foundUser.get(),HttpStatus.OK);
}
}
解决方法
您的代码中有一些错误,首先 foundUser.get()==null
部分没有进入 if 块,因为它抛出了错误。您可以检查 "GETT" 以找出抛出错误的原因。
- 它还需要是
HttpStatus.NOT_FOUND
而不是HttpStatus.HttpStatus.NOT_FOUND
。 - 在“Not Found”行中,使
optionalUser.get()
方法不报错;你也必须删除它。
@GetMapping("/user/{id}")
public ResponseEntity<User> retrieveUser(@PathVariable int id) {
Optional<User> optionalUser = userRepo.findById(id);
if (!optionalUser.isPresent()) {
return new ResponseEntity<>(null,HttpStatus.NOT_FOUND);
} else {
return new ResponseEntity<>(optionalUser.get(),HttpStatus.OK);
}
}
,
如果值不存在,则不应调用 get()
方法。你可以试试像下面这样吗
public ResponseEntity<User> retriveUser(@PathVariable int id){
Optional<User> foundUser = userRepo.findById(id);
if(foundUser.isPresent()) {
return new ResponseEntity<>(foundUser.get(),HttpStatus.HttpStatus.OK);
}else {
return new ResponseEntity<>(null,HttpStatus.NOT_FOUND);
//or just return not found status code
//return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
,
虽然当前接受的答案包含它需要的所有细节,但我在这里添加了我的建议,请看一看。
你可以摆脱if else
块
@RestController
@RequestMapping(path = "users")
static class UserController {
private final Map<Long,UserInfo> users = new HashMap<>();
UserController() {
users.put(1L,new UserInfo(1L,"User 1"));
users.put(2L,"User 2"));
}
@GetMapping(path = "{id}")
public ResponseEntity<UserInfo> get(@PathVariable("id") Long id) {
return findUserById(id)
.map(ResponseEntity::ok)
.orElse(new ResponseEntity<>(UserInfo.notFoundUser(),HttpStatus.NOT_FOUND));
}
Optional<UserInfo> findUserById(@NonNull Long id) {
return Optional.ofNullable(users.get(id));
}
static class UserInfo {
Long id;
String name;
public UserInfo() {
}
public UserInfo(Long id,String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
static UserInfo notFoundUser() {
return new UserInfo(-1L,null);
}
}
}
,
将您的代码更改为以下
if(foundUser.isPresent()) {
return new ResponseEntity<>(foundUser.get(),HttpStatus.OK);
} else {
return new ResponseEntity<>(foundUser.get(),HttpStatus.HTTP_VERSION_NOT_SUPPORTED);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。