我应该用什么类型来调用responseentity?

vshtjzan  于 2021-07-16  发布在  Java
关注(0)|答案(2)|浏览(610)

我有一个控制器

@RestController
public class BookController {
    @GetMapping("/find-by-name/{name}")
    public ResponseEntity<BookEntity> findByName(@PathVariable String name) {
      ...

如果找到了名称,那么在这个方法中我返回

return  ResponseEntity.ok(book);

如果没有,那么

return new ResponseEntity("name= " + name + " not found", HttpStatus.NOT_ACCEPTABLE);

一切正常,但编译器发誓:

Raw use of parameterized class 'ResponseEntity' 
Unchecked assignment: 'org.springframework.http.ResponseEntity' to 'org.springframework.http.ResponseEntity<BookEntity>' 
Unchecked call to 'ResponseEntity(T, HttpStatus)' as a member of raw type 'org.springframework.http.ResponseEntity'

我试着这么做(我在spring.io网站上找到了这个选项)

public ResponseEntity<?> findByName(@PathVariable String name) {
...
return new ResponseEntity<>("name= " + name + " not found", HttpStatus.NOT_ACCEPTABLE);

那个错误消失了,但现在我发誓:

Generic wildcard types should not be used in return types

这两个版本的代码都可以使用,但我想了解如何正确地实现它。

qvsjd97n

qvsjd97n1#

ResponseEntity 表示http响应,包括标头、正文和状态。通常一个回应应该包含一个主体,是吗 String , Void 或者任何你喜欢的东西。因此,t表示身体的类型。例如,

public ResponseEntity<ObjectType> getObjectTYpe() {
....
return new ResponseEntity<ObjectType>(response, httpstatus);
}

或者您可以使用以下表格:

return ResponseEntity.accepted().body(body);
zbdgwd5y

zbdgwd5y2#

你可以用 Object 作为菱形操作符中的类:

public ResponseEntity<Object> someMethod() {
  return new ResponseEntity<>("Some Object", HttpStatus.OK);
}

到目前为止这对我来说还不错。这是因为一切都是从对象扩展而来的。
对于错误处理,我将使用restcontrolleradvice。当illegalargumentexception到达控制器方法时,将调用下面的方法。

@RestControllerAdvice
public class RestControllerErrorHandler {

  @ResponseStatus(HttpStatus.BAD_REQUEST)
  @ExceptionHandler(IllegalArgumentException.class)
  public ResponseEntity<String> handleIllegalArgumentException(HttpServletRequest request, IllegalArgumentException e) {
    return new ResponseEntity<>("your error message", HttpStatus.BAD_REQUEST);
  }
}

更多信息请看这里。在应用程序中使用runtimeexceptions时,这种类型的全局异常处理非常实用。

相关问题