iwork 人员组织同步相关,兼容 iwork 返回

This commit is contained in:
chenbowen
2025-11-25 17:22:11 +08:00
parent 64eb031486
commit 2f9c28f166

View File

@@ -0,0 +1,54 @@
package com.zt.plat.module.system.service.integration.iwork.jackson;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.math.BigDecimal;
/**
* Jackson 反序列化器,允许将诸如 "0.0"、"5" 等字符串形式的数字解析为整数,
* 用于兼容 iWork 返回的非标准整型字段。
*/
public class LenientIntegerDeserializer extends JsonDeserializer<Integer> {
@Override
public Integer deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException {
JsonToken token = parser.currentToken();
if (token == null) {
token = parser.nextToken();
}
if (token == null) {
return null;
}
if (token.isNumeric()) {
return parser.getNumberValue().intValue();
}
if (token == JsonToken.VALUE_STRING) {
String text = parser.getText();
if (text == null) {
return null;
}
String trimmed = text.trim();
if (trimmed.isEmpty()) {
return null;
}
try {
if (trimmed.contains(".")) {
BigDecimal decimal = new BigDecimal(trimmed);
return decimal.intValue();
}
return Integer.parseInt(trimmed);
} catch (NumberFormatException ex) {
return (Integer) ctxt.handleWeirdStringValue(Integer.class, trimmed,
"无法将文本转换为整数");
}
}
if (token == JsonToken.VALUE_NULL) {
return null;
}
return (Integer) ctxt.handleUnexpectedToken(Integer.class, parser);
}
}