Java 在什么情况下,返回响应比编辑HttpServletResponse更好?
我目前找到了三种在Java 在什么情况下,返回响应比编辑HttpServletResponse更好?,java,spring,spring-boot,Java,Spring,Spring Boot,我目前找到了三种在@RestController注释类中为端点编写响应的方法: @RestController public class StringController { @GetMapping("/1") public ResponseEntity<List<String>> getString1(){ return new ResponseEntity<>( new ArrayList<>(
@RestController
注释类中为端点编写响应的方法:
@RestController
public class StringController {
@GetMapping("/1")
public ResponseEntity<List<String>> getString1(){
return new ResponseEntity<>( new ArrayList<>(
Arrays.asList("A", "B", "C", "D")
), HttpStatus.BAD_REQUEST );
}
@GetMapping("/2")
@ResponseStatus(HttpStatus.ACCEPTED)
public List<String> getString2(){
return new ArrayList<>(
Arrays.asList( "E", "F", "G", "H" ) );
}
@GetMapping("/3")
public void getString3(HttpServletResponse response ) throws IOException {
ObjectMapper mapper = new ObjectMapper( );
response.setContentType( "application/json" );
response.setStatus( 321 );
List<String> list = new ArrayList<>( Arrays.asList( "E", "F", "G", "H" ) );
mapper.writeValue( response.getOutputStream(), list );
}
}
@RestController
公共类StringController{
@GetMapping(“/1”)
公共响应getString1(){
返回新的ResponseEntity(新的ArrayList(
数组。asList(“A”、“B”、“C”、“D”)
),HttpStatus.BAD_请求);
}
@GetMapping(“/2”)
@响应状态(HttpStatus.ACCEPTED)
公共列表getString2(){
返回新的ArrayList(
数组.asList(“E”、“F”、“G”、“H”);
}
@GetMapping(“/3”)
public void getString3(HttpServletResponse响应)引发IOException{
ObjectMapper映射器=新的ObjectMapper();
setContentType(“应用程序/json”);
答复:setStatus(321);
List List=newarraylist(Arrays.asList(“E”、“F”、“G”、“H”));
writeValue(response.getOutputStream(),list);
}
}
对于方法1和2,它们只是返回一个响应。我真的不会问这两者之间的关系,因为我认为@ResponseStatus
只是一个较新的补充。
但对于方法3,它不返回响应,而是通过HttpServletResponse
编辑响应本身在什么情况下,创建并返回新响应比编辑HttpServletResponse
更好?
另外,我知道我的状态码都错了,我只是在尝试它们。这些是Spring特有的功能。如果您没有使用Spring,那么必须直接使用
HttpServletResponse
(假设您没有使用其他框架)
如您所见,当您可以直接从方法中查看状态代码和响应类型而不必查看内部时,代码看起来更可读
因此,经验法则是,除非您需要,否则不要直接使用
HttpServletResponse
,您不应该经常这样做。它没有什么不好的,但是使用Spring的注释编写代码更干净。当您的响应太大而无法放入内存,并且您希望流式处理而不是存储和转发时,类似方法3的方法是有意义的。