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

如何在Spring中注册自定义Body处理器以处理Html类型响应?

让Spring支持ResponseEntity类型响应的配置方法

要让Spring能够处理控制器返回的ResponseEntity<Html>类型响应,你需要自定义一个HttpMessageConverter并将其注册到Spring的消息转换器列表中,具体步骤如下:

1. 自定义HttpMessageConverter实现

创建一个处理Html类型的消息转换器,负责将Html对象序列化为HTML响应体:

import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;

import java.io.IOException;
import java.util.List;

public class HtmlMessageConverter implements HttpMessageConverter<Html> {

    @Override
    public boolean canRead(Class<?> clazz, MediaType mediaType) {
        return Html.class.isAssignableFrom(clazz);
    }

    @Override
    public boolean canWrite(Class<?> clazz, MediaType mediaType) {
        return Html.class.isAssignableFrom(clazz);
    }

    @Override
    public List<MediaType> getSupportedMediaTypes() {
        return List.of(MediaType.TEXT_HTML);
    }

    @Override
    public Html read(Class<? extends Html> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        // 若无需支持读取请求中的Html类型,直接抛出不支持异常即可
        throw new UnsupportedOperationException("Reading Html payloads is not supported");
    }

    @Override
    public void write(Html html, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        // 设置响应Content-Type为text/html
        outputMessage.getHeaders().setContentType(MediaType.TEXT_HTML);
        // 假设Html类的toString()方法返回实际HTML内容,若有专属方法可替换为html.getContent()
        String htmlContent = html.toString();
        outputMessage.getBody().write(htmlContent.getBytes());
    }
}

2. 注册自定义转换器

通过配置类将自定义转换器注册到Spring容器,有两种方式可选:

方式一:实现WebMvcConfigurer接口

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new HtmlMessageConverter());
    }
}

方式二:直接注册为Bean(Spring Boot推荐)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HtmlConverterConfig {

    @Bean
    public HtmlMessageConverter htmlMessageConverter() {
        return new HtmlMessageConverter();
    }
}

3. 控制器中使用示例

完成配置后,即可在控制器中直接返回ResponseEntity<Html>:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    @GetMapping("/hello")
    public ResponseEntity<Html> getHello() {
        String name = "bob";
        Html body = HTML."""
            <p> Hello \{name} </p>
            """;
        return ResponseEntity.ok(body);
    }
}

注意事项

确保你的Html类能够正确提供HTML内容:如果toString()方法不是返回实际HTML代码,需要修改HtmlMessageConverter的write方法,调用Html类中对应的内容获取方法(比如html.getHtmlContent())。

内容的提问来源于stack exchange,提问作者Ethan McCue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:37:34