#java #json #objectmapper
#java #json #objectmapper
Вопрос:
Я пытаюсь преобразовать 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
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])
Может кто-нибудь, пожалуйста, скажите мне, как я могу разрешить это исключение?
Комментарии:
1. Не могли бы вы опубликовать
ClientRT
класс? И пример json. Похоже, вы передаете Джексону неверный json2. Я добавил класс и образец json
Ответ №1:
Как упоминалось amicoderozer выше, вам необходимо удалить тип данных полей class ClientRT
из json, а не из класса.
Комментарии:
1. извините, я ошибочно добавил общедоступную строку в json. но это мой ожидаемый результат
2. Не могли бы вы, пожалуйста, указать, какой тип объектов
List<Object> crt
содержит?3. Я вызываю хранимую функцию из postgresql, т.е. roomtype(60), т.е. простой выбор * из ClientRoomType
4. Объекты в списке
List<Object> crt
должны бытьClientRT
объектами, иначе Джексон выбросит aMismatchedInputException
.5. crt содержит только объекты ClientRT . но я пытаюсь преобразовать объект в json
Ответ №2:
JSON, который вы передаете Джексону, неверен.
Вместо того, чтобы передавать Джексону этот 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
.
Комментарии:
1. только имя поля в классе выдает ошибку без типа данных
2. @SpringUser Вы должны удалить тип данных из Json, а не из класса Java. Я отредактировал ответ
3. Нет проблем, единственное, что важно, — это то, что вы понимаете ошибку.
4. этот json — мой ожидаемый результат, которого я не хочу, но моя ошибка все еще существует
5. Вы уверены, что передаете Джексону правильный json? Я попробовал, и ваш код работает для меня с правильным json.