Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在什么情况下,返回响应比编辑HttpServletResponse更好?_Java_Spring_Spring Boot - Fatal编程技术网

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的方法是有意义的。