Я хочу преобразовать строковые массивы JSON в VO и использовать gson.
PostMan RequestBody Вызвать мой TestApi:
{"data": "[{\"id\":\"1\",\"name\":\"james\",\"passwd\":\"abcd\"},{\"id\":\"2\",\"name\":\"john\",\"passwd\":\"dcba\"},{\"id\":\"3\",\"name\":\"mike\",\"passwd\":\"opppt\"}]"}
Мой класс озвучивания:
@Data
public class TestVo {
private String id;
private String name;
private String passwd;
}
Я попробовал этот код:
@PostMapping(value = "/testApi")
public void testApi(@RequestBody String data){
Gson gson = new Gson();
JsonElement jsonElement = gson.fromJson(data, JsonElement.class);
String jsonStr = jsonElement.getAsJsonObject().get("data").getAsString();
List<TestVo> list = gson.fromJson(jsonStr, new TypeToken<List<TestVo>>(){}.getType());
.
.
.
Вывод
Ожидается строка, но BEGIN_ARRAY в столбце строки 1..... Ошибка T.T
код ошибки: { List<TestVo> list = gson.fromJson(jsonStr, new TypeToken<List<TestVo>>()(){}.getType()); } здесь. get.("data") и getAsString не вызывают ошибки
coderhelper.com/a/5554296/12181863 если вы посмотрите на это, внутренний список в методе .fromJson() использует ArrayList. Можете ли вы попробовать это и посмотреть, поможет ли это?
Ваши сопоставления не соответствуют ожидаемому вводу, следовательно, неверны. Вы заметили поле
data
? Кроме того, зачем вам нужно принимать его как строку и выполнять ручную десериализацию, если Spring MVC может сделать все это за вас прямо из коробки?