Rest API method get



我应该如何检查从DB接收到实体并返回正确的响应?我使用restController。我想检查我是否从DB接收到用户。如果我找到了用户,我想返回用户和HttpStatus.OK,如果没有-HttpStatus.not_found.

public ResponseEntity<User> getUser(@PathVariable("id") int id) {
User User= this.userService.getUserById(id);
ResponseEntity<User> responseEntity = new ResponseEntity<>(HttpStatus.NOT_FOUND);
if (Objects.nonNull(user)) {
responseEntity = new ResponseEntity<>(user, HttpStatus.OK);
}
return responseEntity;
}

简单地说,如果您想使用Optional来检查数据库中用户的可用性:

public ResponseEntity<User> getUser(@PathVariable("id") int id) {
User User= this.userService.getUserById(id);
ResponseEntity<User> responseEntity = new ResponseEntity<>(HttpStatus.NOT_FOUND);
if (Optional.ofNullable(user).isPresent()) {
responseEntity = new ResponseEntity<>(user, HttpStatus.OK);
}
return responseEntity;
}

路径参数不能是可选的,您必须将2个URL映射到get控制器方法。试试下面的:

@RequestMapping(method=GET, value={"/", "/{id}"})
public ResponseEntity<User> getUser(@PathVariable Optional<Integer> id) {
if(!id.isPresent()){
return ResponseEntity.notFound().build();
}
User User= this.userService.getUserById(id);
ResponseEntity<User> responseEntity = new ResponseEntity<>(HttpStatus.NOT_FOUND);
if (Objects.nonNull(user)) {
responseEntity = new ResponseEntity<>(user, HttpStatus.OK);
}
return responseEntity;
}

此解决方案需要Spring 4.1+和Java 1.8。

对我来说,这是一种优雅的方式,通常id是Long类型的

public ResponseEntity<User> getUser(@PathVariable ("id") Long id) {
return Optional.of(this.userService.getUserById(id))
.map(u -> new ResponseEntity<>(u, HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}

最新更新