在Spring的rest controller(标有@RestController)中,函数可以return既是模型对象又是ResponseEntity对象,哪个更好?
In Spring's rest controller (marked with @RestController), functions can return both model objects and a ResponseEntity object, which is better?
作为一个Spring Boot 菜鸟,我只知道在控制器class 中,它的public 函数可以return 模型对象和ResponseEntity 对象。像
public List<Book> getBooks() {}
或
public ResponseEntity<Book> getBooks() {}
但我的问题是,当有多个选择时,哪个更好?
基本上,如果您使用 ResponseEntity,除了对象本身的内容之外,您还可以控制 HTTP 响应状态。
public ResponseEntity<Object> getObject() {
return new ResponseEntity<Object>(object, Httpstatus.OK);
}
例如,如果您需要在执行任何操作之前验证请求中的一些数据,并且您希望通过 HTTP 状态代码让您的客户端知道发生了什么,您可以在不同的选项之间进行选择。
HttpStatus.CONFLICT
HttpStatus.CREATED
在这里您可以查看不同的状态代码:
只是为了更清楚地说明@lbpeppers 提到的内容。使用 ResponseEntity 有很多优点。
1. 如果状态码是400或404之类的,客户端不需要查看消息的body,这很有帮助
2. 在某些情况下,客户对 body 不感兴趣。它所需要的只是操作的状态
3. HttpStatus calss中有很多方便的方法,如is1xxInformational
、is2xxSuccessful
、is3xxRedirection
、is4xxClientError
、is5xxServerError
,可以像[=16]一样使用=]
response.getStatusCode().is2xxSuccessful()
作为一个Spring Boot 菜鸟,我只知道在控制器class 中,它的public 函数可以return 模型对象和ResponseEntity 对象。像
public List<Book> getBooks() {}
或
public ResponseEntity<Book> getBooks() {}
但我的问题是,当有多个选择时,哪个更好?
基本上,如果您使用 ResponseEntity,除了对象本身的内容之外,您还可以控制 HTTP 响应状态。
public ResponseEntity<Object> getObject() {
return new ResponseEntity<Object>(object, Httpstatus.OK);
}
例如,如果您需要在执行任何操作之前验证请求中的一些数据,并且您希望通过 HTTP 状态代码让您的客户端知道发生了什么,您可以在不同的选项之间进行选择。
HttpStatus.CONFLICT
HttpStatus.CREATED
在这里您可以查看不同的状态代码:
只是为了更清楚地说明@lbpeppers 提到的内容。使用 ResponseEntity 有很多优点。
1. 如果状态码是400或404之类的,客户端不需要查看消息的body,这很有帮助
2. 在某些情况下,客户对 body 不感兴趣。它所需要的只是操作的状态
3. HttpStatus calss中有很多方便的方法,如is1xxInformational
、is2xxSuccessful
、is3xxRedirection
、is4xxClientError
、is5xxServerError
,可以像[=16]一样使用=]
response.getStatusCode().is2xxSuccessful()