Spring Boot 如果在数据库中未找到数据,则返回空内容

bnl4lu3b  于 2023-03-29  发布在  Spring
关注(0)|答案(1)|浏览(245)

我有一个端点控制器,我想在那里发出一个GET请求并返回数据。如果没有找到数据,我想返回空内容或什么都没有。我试过这个:

private Service listsService;
    
    
@RequestMapping(method = {RequestMethod.GET}, path = {"id/{id}"})
    public ResponseEntity<Object> find(@PathVariable String id) {
    
        LookupResponse lookupResponse = listsService.findById(id);
        return new ResponseEntity<>(lookupResponse, HttpStatus.OK);
    }
    
       .................
    
@Override
public LookupResponse findById(String id) {
    
    Optional<Lists> list = ListsRepository.findById(id);
    
    if(list.isPresent())
    {
        Lists lists = binList.get();
        LookupResponse response = LookupResponse.builder()
               .countryCode(lists.getCountry())
                        .category(lists.getType())
                        .build())
               .build();
    
        return response;
    }
    
    return null;
}

如果在数据库中找不到记录,从端点返回no content status的正确方法应该是什么?

ipakzgxi

ipakzgxi1#

您可以通过以下方式使用可选API:

@Override
public LookupResponse findById(String id) {
    return ListsRepository.findById(id).orElseThrow(() -> new SomeRuntimeException("Entity not found"));;
}

然后使用@ControllerAdvice注解创建ResponseEntityExceptionHandler:

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value = {SomeRuntimeException.class})
    protected ResponseEntity<Object> handleNotFound(
            RuntimeException ex, WebRequest request) {
        return handleExceptionInternal(
                ex, "Entity not found", new HttpHeaders(), HttpStatus.NOT_FOUND, request);
    }
}
  • 您可能应该为SomeRuntimeException找到一个更好的名称和更好的消息,或者使用一些通用的东西。

相关问题