При преобразовании объекта в JSON ошибка: com.fasterxml.jackson.databind.exc.MismatchedInputException - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь преобразовать List<Object> в JSON формат, используя ObjectMapper.Я пытался, как показано ниже, но я получаю исключение, т.е.

com.fasterxml.jackson.databind.exc.MismatchedInputException:

    public List<ClientRT> callSP() throws IOException { 

            List<Object> crt=crtRepo.roomtype(60);          

            ObjectMapper mapper = new ObjectMapper();
            String json=mapper.writeValueAsString(crt);

            //ClientRT obj=mapper.readValue(json,ClientRT.class);

            List<ClientRT> obj=mapper.readValue(json,mapper.getTypeFactory()
                                                           .constructCollectionLikeType(List.class,ClientRT.class));
            return obj;
        }

ClientRT Class

public class ClientRT { 

    public Integer res_nclient_room_type_id;    
    public String res_sclient_rt_desc;
    public String  res_sclient_rt_name;
    public String res_sclient_rt_code;

    //getter setter

    public ClientRT() {
        super();
    }
    @Override
    public String toString() {
        return "ClientRT [res_nclient_room_type_id=" + res_nclient_room_type_id + ", res_sclient_rt_desc="
                + res_sclient_rt_desc + ", res_sclient_rt_name=" + res_sclient_rt_name + ", res_sclient_rt_code="
                + res_sclient_rt_code + "]";
    }
}

Ожидаемый результат в JSON

[  
  { "res_nclient_room_type_id":1 ,   
    "res_sclient_rt_desc": "FACILITIES - AVAILABLE ROOM",
    "res_sclient_rt_name":"FACILITIES - AVAILABLE ROOM" ,
    "res_sclient_rt_code":"050" 
 },

]

Исключение

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.spacestudy.model.ClientRT` out of START_ARRAY token
 at [Source: (String)"[[1,"TEMPORARILY NOT ASSIGNED","TEMPORARILY NOT ASSIGNED","000"],[2,"FACILITIES - AVAILABLE ROOM","FACILITIES - AVAILABLE ROOM","050"],[3,"FACILITIES - UNDEFINED PURPOSE","FACILITIES - UNDEFINED PURPOSE","060"],[4,"FACILITIES - UNFINISHED AREA","FACILITIES - UNFINISHED AREA","070"],[5,"CLASSROOM/LECTURE HALL","CLASSROOM/LECTURE HALL","110"],[6,"CLASSROOM SERVICE","CLASSROOM SERVICE","115"],[7,"CLASSROOM STORAGE","CLASSROOM STORAGE","116"],[8,"CLASSROOM KITCHEN","CLASSROOM KITCHEN","119"],[9,"CLA"[truncated 8500 chars]; line: 1, column: 2] (through reference chain: java.util.ArrayList[0])

Может кто-нибудь сказать, пожалуйста, как я могу решить эту проблемуИсключение?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Как уже упоминалось выше amicoderozer, вам нужно удалить тип данных полей класса ClientRT из json, а не из класса.

0 голосов
/ 16 апреля 2019

JSON, который вы передаете Джексону, неверен.

Вместо того, чтобы передать Джексону этот Джсон:

[  
  { "res_nclient_room_type_id":1 ,   
    "public String res_sclient_rt_desc": "FACILITIES - AVAILABLE ROOM",
    "public String  res_sclient_rt_name":"FACILITIES - AVAILABLE ROOM" ,
    "public String res_sclient_rt_code":"050" 
 }
]

Попробуйте с этим (удалите public String из json):

[  
  { "res_nclient_room_type_id":1 ,   
    "res_sclient_rt_desc": "FACILITIES - AVAILABLE ROOM",
    "res_sclient_rt_name":"FACILITIES - AVAILABLE ROOM" ,
    "res_sclient_rt_code":"050" 
  }
]

Джексон не может проанализировать json, потому что он не может найти соответствующее поле Java в классе ClientRT. Удалите public String из json и оставьте только имя поля класса ClientRT.

...