HTTP的一个请求或响应,都叫做实体(entity)。在Spring中,有一个HttpEntity类,就表示HTTP请求实体,它有两个子类RequestEntity和ResponseEntity,分别表示请求实体和响应实体。
不论是请求实体还是响应实体,都包含首部(header)和主体(body)(对于GET请求,body可能为空)。在Spring中,表示header的类为HttpHeaders,HttpHeaders是MultiValueMap<String, String>的子类,说明一个header可以有多个值;而body则为泛型,可以为任意类型。
RequestEntity 的使用
RequestEntity 相对于
ResponseEntity 的使用
ResponseEntity 是HTTP响应实体,相对于父类HttpEntity,增加了响应状态码。状态码用类HttpStatus表示,它包含了状态值(value,如200)和原因短语(reason phrase,如OK)。
ResponseEntity 可以在HTTP客户端请求数据时使用,也可以在HTTP服务端处理请求时使用。
HTTP客户端通过RestTemplate的getForEntity() 或 exchange() 方法请求数据时返回ResponseEntity:
ResponseEntity<String> entity = template.getForEntity("https://example.com", String.class); String body = entity.getBody(); MediaType contentType = entity.getHeaders().getContentType(); HttpStatus statusCode = entity.getStatusCode();
在Spring的Controller方法中使用ResponseEntity:
@RequestMapping("/handle") public ResponseEntity<String> handle() { URI location = ...; HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setLocation(location); responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED); }
参考文档