我是靠谱客的博主 直率朋友,最近开发中收集的这篇文章主要介绍全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.因为StringSerializer有final修饰,所以拷一份
com.fasterxml.jackson.databind.ser.std.StringSerializer,对里面的serializeWithType方法做下改写,根据没有没传入转繁体字请求头,确定要不要把中文转成繁体

@JacksonStdImpl
public final class MyStringSerializer  extends StdScalarSerializer<Object> implements ContextualSerializer {
	private static final long serialVersionUID = 1L;
	
	public MyStringSerializer() {
		super(String.class, false);
	}

.....................

	@Override
	public final void serializeWithType(Object value, JsonGenerator gen, SerializerProvider provider,
			TypeSerializer typeSer) throws IOException {
		// no type info, just regular serialization
		genStr(value, gen);
	}

	.........................

	private void genStr(Object value, JsonGenerator gen) throws IOException {
		// 查看上下文中有没有返回简体或繁体的标识
		String strValue = (String) value;
		gen.writeString(needFTZ() ? DrinStringUtils.toFTZ(strValue) : strValue);
	}

	private boolean needFTZ() {
		HttpServletRequest request = getRequest();
		if (null == request) {
			return false;
		}
		String ftzFlag = request.getHeader(StaticValue.STATIC_JT_OR_FT);
		// 如果不为空且等于1,所有接口返回的汉字都是简体
		return DrinStringUtils.isNotNull(ftzFlag) && StaticValue.STATIC_ONE.equals(String.valueOf(ftzFlag));
	}

	private HttpServletRequest getRequest() {
		try {
			return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		} catch (Exception e) {
			return null;
		}
	}
	private  String toFTZ(String jtz) {
		return ZHConverter.convert(jtz, ZHConverter.TRADITIONAL);
	}
}


2.写一个自定义的BeanSerializerFactory,把里面的默认string序列化类替换掉。

public class MyBeanSerializerFactory extends BeanSerializerFactory {

	private static final long serialVersionUID = 1L;

	public MyBeanSerializerFactory(SerializerFactoryConfig config) {
		super(config);
		// 强行替换父类里面的字符串序列化工具
		_concrete.put(String.class.getName(), new MyStringSerializer());
	}

}

3:定义一个ObjectMapper bean,将SerializerFactory替换

	@Bean
	public ObjectMapper createObjectMapper() {
		ObjectMapper objectMapper = new ObjectMapper();
		// 时区
		objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		// 对空值的处理
		objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.ALWAYS);

		// 替换默认的序列化工厂,把对字符串的转换设置成自定义带繁简的序列化工具
		objectMapper.setSerializerFactory(new MyBeanSerializerFactory(null));
		// 设置重写了parse方法的日期format
		objectMapper.setDateFormat(new MySimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
		return objectMapper;
	}

最后

以上就是直率朋友为你收集整理的全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字)的全部内容,希望文章能够帮你解决全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部