如何替换原来的SpringMVC统一的json消息转换器?
原提问者GitHub用户hyuga0410
替换SpringMVC中的json消息转换器可以通过以下步骤实现:
添加Jackson依赖 在Maven的pom.xml文件中添加以下依赖:
com.fasterxml.jackson.core jackson-databind 2.12.1 创建自定义消息转换器 使用Jackson库,你可以创建一个自定义的消息转换器,以替换默认的SpringMVC中的JSON消息转换器。下面展示一个简单的示例:
import java.io.IOException; import java.nio.charset.StandardCharsets;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
import com.fasterxml.jackson.databind.ObjectMapper;
public class CustomJsonMessageConverter extends AbstractJackson2HttpMessageConverter {
public CustomJsonMessageConverter() { super(new ObjectMapper(), MediaType.APPLICATION_JSON); }
@Override protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { super.writeInternal(obj, outputMessage); HttpHeaders headers = outputMessage.getHeaders(); headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); headers.set(HttpHeaders.CONTENT_ENCODING, StandardCharsets.UTF_8.name()); }
} 这里的CustomJsonMessageConverter继承了AbstractJackson2HttpMessageConverter,并设置了ObjectMapper和MediaType属性。在writeInternal方法中,它通过使用super.writeInternal(obj, outputMessage)来调用AbstractJackson2HttpMessageConverter中的默认实现,并且在写入消息后设置了一些HTTP头部。
注册自定义消息转换器 在Spring配置文件中的适当位置,注册自定义消息转换器。
mvc:annotation-driven mvc:message-converters </mvc:message-converters> </mvc:annotation-driven> 在此示例中,CustomJsonMessageConverter被注册为消息转换器。对于Spring Boot项目,只需要将自定义消息转换器添加到类路径中来替换默认转换器。
fastjson2对SpringMVC的支持com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter在扩展包里面:
com.alibaba.fastjson2 fastjson2-extension 2.0.x
关于Features的使用请参考https://github.com/alibaba/fastjson2/wiki/Features_cn
原回答者GitHub用户VictorZeng
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。