Spring Boot如何读取并返回text/html类型的REST接口响应
解决方案:Spring Boot中读取并返回text/html类型的REST响应
问题分析
- 使用
String.class接收响应会将HTML内容转为字符串,虽能返回但不符合“保持原始类型”的需求 - 使用
Object.class接收会抛出UnknownContentTypeException,因为Spring没有默认的HttpMessageConverter能将text/html类型转换为Object
可行方案
方案1:通过字节数组(byte[])接收并返回
Spring默认的ByteArrayHttpMessageConverter支持所有媒体类型(包括text/html),可直接将响应体读取为字节数组,保留原始内容。返回时设置响应头的Content-Type为text/html即可。
修改后的Controller方法代码:
@GetMapping("/get") public ResponseEntity<byte[]> get(@PathVariable("name") String name) { Map<String, String> params = new HashMap<>(); params.put("name", name); String url = getEndPoint(domain, params); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.TEXT_HTML); HttpEntity<Object> requestEntity = new HttpEntity<>(headers); ResponseEntity<byte[]> response = restOperations.exchange(url, HttpMethod.GET, requestEntity, byte[].class); // 执行你的其他业务逻辑 HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(MediaType.TEXT_HTML); return new ResponseEntity<>(response.getBody(), responseHeaders, response.getStatusCode()); }
方案2:使用Resource类型接收并返回
Spring的ResourceHttpMessageConverter也支持text/html类型,通过Resource接收响应可保留原始内容,返回时同样设置正确的Content-Type:
修改后的Controller方法代码:
@GetMapping("/get") public ResponseEntity<Resource> get(@PathVariable("name") String name) { Map<String, String> params = new HashMap<>(); params.put("name", name); String url = getEndPoint(domain, params); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.TEXT_HTML); HttpEntity<Object> requestEntity = new HttpEntity<>(headers); ResponseEntity<Resource> response = restOperations.exchange(url, HttpMethod.GET, requestEntity, Resource.class); // 执行你的其他业务逻辑 HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(MediaType.TEXT_HTML); return new ResponseEntity<>(response.getBody(), responseHeaders, response.getStatusCode()); }
方案有效性说明
ByteArrayHttpMessageConverter是Spring自动注册的转换器,直接读取响应体的原始字节,不做任何字符串转换ResourceHttpMessageConverter将响应体封装为Spring的Resource对象,保留原始内容,适合需要对资源做进一步操作的场景- 返回时显式设置
Content-Type为text/html,确保客户端接收到正确的媒体类型
内容的提问来源于stack exchange,提问作者kar
相关产品推荐
相关产品推荐

