json
下划线驼峰转化问题
代码方式
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
// params是任意Object
String json = mapper.writeValueAsString(params);
配置类
package cn.yottacloud.pc.core.json;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import io.swagger.v3.core.jackson.ModelResolver;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
/**
* jackson配置
*/
@Configuration
public class JacksonConfiguration implements Jackson2ObjectMapperBuilderCustomizer {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
//空字符转为null
jacksonObjectMapperBuilder.featuresToEnable(
DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
jacksonObjectMapperBuilder.deserializerByType(String.class,
new JacksonEmptyStringDeserializer());
//未知属性报错关闭
jacksonObjectMapperBuilder.featuresToDisable(
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
//属性为null不序列化
jacksonObjectMapperBuilder.serializationInclusion(JsonInclude.Include.ALWAYS);
//属性命名自动转换为下划线方式
jacksonObjectMapperBuilder.propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
//long转字符串
jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
//date转long
jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//第三方模块
jacksonObjectMapperBuilder.modules(new JavaTimeModule(), new Jdk8Module(),
new ParameterNamesModule());
}
@Bean
public ModelResolver modelResolver(ObjectMapper objectMapper) {
return new ModelResolver(objectMapper);
}
}
注解方式
对象按指定名称接受(不受转化影响)
加在属性上
@JsonProperty("paymentAmt")
map转T泛型对象
阿里的 jackson com.fasterxml.jackson.databind.ObjectMapper可以
任意对象都可以转
convertValue(Object fromValue, Class
toValueType)
json转对象(java)
代码方式
hutool的工具类
JSONUtil.toBean(respStr, DingfuResult.class);
注解方式
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
类上加此注解,类的属性找不到json对象的属性时,可防止报错
对象转Map(一层,无法递归)
/**
* 将对象转换为 Map(只支持一层,无法递归对子孙属性转换)
* @param obj
* @return
*/
public static Map<String, String> object2Map(Object obj) {
Map<String, String> map = new HashMap<>();
Class<?> objClass = obj.getClass();
// 获取对象的所有字段
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true); // 允许访问私有字段
try {
// 获取字段名
String fieldName = field.getName();
// 获取字段值,并转换为字符串
String fieldValue = field.get(obj).toString();
// 将字段名和字段值添加到Map中
map.put(fieldName, fieldValue);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return map;
}

浙公网安备 33010602011771号