<dependency>
<groupId>com.hubspot.jackson</groupId>
<artifactId>jackson-datatype-protobuf</artifactId>
<version>0.9.12</version>
</dependency>
/**
* ProtoBean 和 Java Bean 之间的转换
*/
public enum ProtoBeanUtils {
INSTANCE;
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
// 注册对protobuf的支持
MAPPER.registerModule(new ProtobufModule());
// 忽略属性大小写
//mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
// Enum -> Integer
MAPPER.configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, true);
// 允许单引号
//mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
// 解析 json 时,字段名可以不用引号
//mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
// 生成 json 时,忽略不存在字段
MAPPER.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
// 使用下划线命名法
MAPPER.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
// 只序列化非空字段
MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 忽略字段变动
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 直接读取字段,不走 getter/setter 方法
MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
MAPPER.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
MAPPER.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
MAPPER.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);
}
public <T> T convert(Object o, Class<T> clazz) {
long startTime = System.currentTimeMillis();
try {
return MAPPER.convertValue(o, clazz);
}finally {
long endTime = System.currentTimeMillis();
System.out.println("本次转化耗时:"+(endTime - startTime));
}
}
}
原文:https://www.cnblogs.com/gingo/p/14868158.html