小编abr*_*ril的帖子

CustomDeserializer没有默认(无arg)构造函数

我正在使用RestTemplate来使用REST Api.我从API获得的响应有很多嵌套对象.这里有一个小片段作为例子:

"formularios": [
  {
    "form_data_id": "123006",
    "form_data": {
      "form_data_id": "123006",
      "form_id": "111",
      "efs": {
        "1": {},
        "2": "{\"t\":\"c\",\"st\":\"m\",\"v\":[{\"id\":\"3675\",\"l\":\"a) Just an example\",\"v\":\"1\"},{\"id\":\"3676\",\"l\":\"b) Another example.\",\"v\":\"2\"}]}"
      }
    }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是大多数时候"1"实际上有内容,就像"2"一样,而jackson只是将它解析为对象"efs"上的String.但有时候,就像在代码片段中一样,API将其发送为空,并且jackson将其作为对象,这给了我一个错误,说明了一些关于START_OBJECT的内容(不记得确切的错误,但对于这个问题并不重要) ).

所以我决定创建一个自定义反序列化器,所以当jackson读取"1"时,它会忽略空对象并将其解析为空字符串.

这是我的自定义反序列化器:

public class CustomDeserializer extends StdDeserializer<Efs> {

 public CustomDeserializer(Class<Efs> t) {
     super(t);
 }

 @Override
 public Efs deserialize(JsonParser jp, DeserializationContext dc)
         throws IOException, JsonProcessingException {

     String string1 = null;
     String string2 = null;
     JsonToken currentToken = null;

     while ((currentToken = jp.nextValue()) != null) {
         if (currentToken.equals(JsonToken.VALUE_STRING)) {
             if (jp.getCurrentName().equals("1")) {
                 string1 = …
Run Code Online (Sandbox Code Playgroud)

java spring jackson resttemplate json-deserialization

10
推荐指数
2
解决办法
8907
查看次数