REM:
1. Json解析时直接忽略不存在的字段,避免json解析异常
This commit is contained in:
HuangXin 2021-10-21 10:41:42 +08:00
parent 6a69040854
commit d93442fa4f
2 changed files with 41 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import com.dispose.common.ConstValue;
import com.dispose.pojo.dto.protocol.base.ProtocolRespDTO;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMethod;
@ -27,6 +28,11 @@ public class RestfulInterface {
* The constant OBJECT_MAPPER.
*/
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
static {
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
/**
* The constant timeOutValue.
*/

View File

@ -1,5 +1,6 @@
package com.dispose.test.dev.debug;
import com.fasterxml.jackson.core.type.TypeReference;
import com.dispose.common.ConstValue;
import com.dispose.common.DDoSAttackType;
import com.dispose.common.DisposeConfigValue;
@ -8,21 +9,26 @@ import com.dispose.common.Helper;
import com.dispose.common.HttpType;
import com.dispose.common.ObjectStatus;
import com.dispose.common.PrivacyHelper;
import com.dispose.pojo.dto.protocol.base.ProtocolRespDTO;
import com.dispose.pojo.entity.DisposeDevice;
import com.dispose.security.arithmetic.CryptoHelper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.pengxin.dispose.common.PengXinStartTaskRsp;
import inet.ipaddr.IPAddress;
import inet.ipaddr.IPAddressString;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@ -82,6 +88,35 @@ public class demo {
Assert.assertTrue(Helper.ipInRange("::", "::abcd"));
}
private static <T> Type createRespType(Class<T> c) {
Type[] types = new Type[1];
types[0] = c;
return ParameterizedTypeImpl.make(ProtocolRespDTO.class, types,
ProtocolRespDTO.class.getDeclaringClass());
}
@Test
public void json_test() {
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String json = "{\"ver\":1,\"cryptoType\":0,\"timeStamp\":1634780505248,\"code\":200,\"msgContent\":{\"deviceName\":\"okp\",\"items\":[{\"taskReqId\":\"1634780428667\"," +
"\"taskId\":\"c285c206-0e4e-45f5-beab-9ac21eaf4769\",\"status\":0,\"message\":\"SUCCESS\",\"taskInfo\":\"192.168.123.126\"}]}}";
try {
ProtocolRespDTO<PengXinStartTaskRsp> rspInfo = OBJECT_MAPPER.readValue(json,
new TypeReference<ProtocolRespDTO<PengXinStartTaskRsp>>() {
@Override
public Type getType() {
return createRespType(PengXinStartTaskRsp.class);
}
});
log.info("Ret: {}", rspInfo);
} catch (Exception ex) {
log.error("Exception: {}", ex.getMessage());
}
}
/**
* Date time debug.
*/