Administrator
2 days ago 34f9584e3694be322f28b7f6697fc656946ecea2
feat(common): 添加HTTP消息转换器配置支持markdown和文本类型

- 配置MappingJackson2HttpMessageConverter支持更多媒体类型
- 添加对text/markdown和text/html类型的支持
- 配置更宽松的JSON解析选项允许控制字符和反斜杠转义
- 设置默认字符集为UTF-8
- 保持对application/json和text/plain类型的兼容性
1 files added
38 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/configure/HttpMessageConverterConfigure.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/configure/HttpMessageConverterConfigure.java
New file
@@ -0,0 +1,38 @@
package cc.mrbird.febs.common.configure;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class HttpMessageConverterConfigure {
    @Bean
    public MappingJackson2HttpMessageConverter markdownHttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        // 配置更宽松的 JSON 解析选项
        mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
        converter.setObjectMapper(mapper);
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        // 支持 text/markdown 和 text/plain 类型
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(new MediaType("text", "markdown", StandardCharsets.UTF_8));
        supportedMediaTypes.add(new MediaType("text", "html", StandardCharsets.UTF_8));
        converter.setSupportedMediaTypes(supportedMediaTypes);
        return converter;
    }
}