1、注意:
1、使用封装在类 JsonUtil中
2、使用中必须设置的属性
//此属性一般配置上:String转对象时,如果String定义的字段在对象中不存在,则会报错,具体错误参照第5点。
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
2、Pom引用3个架包
注意:<!-- 请根据实际需要选择版本 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.2</version>
</dependency>
3、使用
1)、封装成一个全局变量
public class JsonUtil {
/**
* 1、ObjectMapper 是线程安全的,可以被多个线程共享使用。
* 2、创建 ObjectMapper 是一个相对昂贵的操作,因为它需要初始化各种配置(如模块、序列化设置等)。频繁创建新的 ObjectMapper 实例会影响性能。
*/
private static final ObjectMapper objectMapper = new ObjectMapper();
static {
//自定义配置
//设置没有字段忽略,而不是报错。String转对象时,如果String定义的字段在对象中不存在,则会报:
// java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "message2"
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
public static ObjectMapper getObjectMapper() {
return objectMapper;
}
}
2)、spring boot则可以定义成Bean
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// 自定义配置
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
return objectMapper;
}
}
使用时直接通过依赖注入获取 ObjectMapper:
@Autowired
private ObjectMapper objectMapper;
4、调用例子
public static void main(String[] args) {
HttpResult result = new HttpResult();
result.setStatus(true);
result.setCode("200");
//获取对象
ObjectMapper objectMapper = JsonUtil.getObjectMapper();
try {
//对象转string
String objStr = objectMapper.writeValueAsString(result);
IPrintUtil.print(objStr);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
//String 转对象
String jsonValue = "{\"status\":true,\"code\":\"200\",\"message\":null,\"message2\":null}";
try {
HttpResult sk = objectMapper.readValue(jsonValue,HttpResult.class);
IPrintUtil.print(sk);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
IPrintUtil.print("finished!");
}
5、抛错信息

增加不必填的属性即可。
Exception in thread "main" java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "message2" (class com.ssdemo.domain.HttpResult), not marked as ignorable (4 known properties: "status", "code", "message", "errorMessage"])
at [Source: (String)"{"status":true,"code":"200","message":null,"message2":null}"; line: 1, column: 59] (through reference chain: com.ssdemo.domain.HttpResult["message2"])
at com.ssdemo.utils.HttpUtils.main(HttpUtils.java:246)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "message2" (class com.ssdemo.domain.HttpResult), not marked as ignorable (4 known properties: "status", "code", "message", "errorMessage"])
at [Source: (String)"{"status":true,"code":"200","message":null,"message2":null}"; line: 1, column: 59] (through reference chain: com.ssdemo.domain.HttpResult["message2"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1138)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2224)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1709)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1687)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:320)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4825)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3772)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3740)
at com.ssdemo.utils.HttpUtils.main(HttpUtils.java:243)
4万+

被折叠的 条评论
为什么被折叠?



