You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:57:20