用于一般的 JSONUtil 将 json 串转为 指定的类实体。(当指定的类使用了注解 @JsonIgnoreProperties(ignoreUnknown = true))
指定的 json 为 jackson
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.13.2version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.13.2version>
dependency>
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
.......
public class JsonUtil {
private static ObjectMapper objectMapper = new ObjectMapper();
static {
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}
/**
* 将json转化为实体
*
* @param jsonStr
* @param obj
* @return
*/
public static <T> T JSONToObj(String jsonStr, Class<T> obj) {
T t = null;
try {
t = objectMapper.readValue(jsonStr, obj);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
........
}
使用举例:
StartBusDTO businessFlowDTO = JsonUtil.JSONToObj(json, StartBusDTO.class);
则 StartBusDTO 的实体如果添加了注解
@JsonIgnoreProperties(ignoreUnknown = true) 例如:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class StartBusDTO{
.........
}
在 JSON 使用 util 转为实体类的过程中可能出现 json 中的属性多于或者少于 要转换的实体,一般情况下在 json 中属性少于 要转换的实体时并不会出现问题,但当出现属性多于要转换的实体的时如果不添加此注解则会直接抛出异常,故此注解用于对实体转换的兼容保护。