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

时间:2018-08-20 13:57:07

标签: java spring spring-boot

我目前发现了三种方法来编写带有StartDate注释的类中的端点响应:

@RestController

对于方法1和2,它们只是返回一个响应。因为我认为@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 ); } } 只是一个新的增加,所以我真的不会在这两者之间询问。 但是对于方法3,它不返回响应,而是通过@ResponseStatus来编辑响应本身。 在什么情况下,与编辑HttpServletResponse相比,创建并返回新响应是更好的选择吗?

P.S。我知道我的状态码都错了,我只是在尝试它们。

1 个答案:

答案 0 :(得分:1)

这些是Spring的特定功能。如果您不使用Spring,则必须直接使用for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(figOutVar[i][j] == 0){ figOutVar[i][j] = //here you can replace the zero with something else } } } (假设您没有使用其他框架)。

如您所见,当您直接从方法中看到状态代码和响应类型而不必查看内部时,代码看起来更具可读性。

因此,经验法则是,除非需要,否则不要直接使用HttpServletResponse,并且不必经常这样做。没什么不好,但是使用Spring的注释进行编码更干净。