在什么情况下,返回响应比编辑 HttpServletResponse 更好?

我目前发现了三种为带@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 );

    }


}

对于方法 1 和 2,它们只是返回一个响应。我不会真正询问两者之间的问题,因为我认为@ResponseStatus这只是一个新的补充。但是对于方法 3,它不返回响应,而是通过HttpServletResponse. 在什么情况下,创建和返回新响应比编辑HttpServletResponse?


PS 我知道我的状态代码都是错误的,我只是在试验它们。


HUH函数
浏览 164回答 1
1回答

红颜莎娜

这些是 Spring 特定的功能。如果您没有使用 Spring,则必须HttpServletResponse直接使用(假设您没有使用其他框架)。如您所见,当您可以直接从方法中查看状态代码和响应类型而不必查看内部时,代码看起来更具可读性。所以经验法则是,HttpServletResponse除非你需要,否则不要直接使用,你不应该经常这样做。它没有什么不好,但是使用 Spring 的注释进行编码会更清晰。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java