내가 JSON은 DB에 저장 한을 POJO에 JSON을 역 직렬화 할 수 없습니다와 나는 POJO가
JSON in DB
{
"requests": [
{
"url": "http://localhost:8080/wst-server-1.0-SNAPSHOT/services/rest/",
"path": "3/reset",
"method": "POST",
"statusCode": "204",
"statusMessage": "No Content"
},
{
"url": "http://localhost:8080/wst-server-1.0-SNAPSHOT/services/rest/",
"path": "3/orders",
"method": "POST",
"statusCode": "201",
"statusMessage": "Created"
}
]
}
the code
Gson gson = new Gson();
String json = gson.toJson(rs.getString(Columns.REQUEST.getName()));
logger.info(json);
ClientTask task = gson.fromJson(json, ClientTask.class);
logger.info(json)
로 직렬화 할
"{\n \"requests\": [\n {\n \"url\": \"http://localhost:8080/wst-server-1.0-SNAPSHOT/services/rest/\",\n \"path\": \"3/reset\",\n \"method\": \"POST\",\n \"statusCode\": \"204\",\n \"statusMessage\": \"No Content\"\n },\n {\n \"url\": \"http://localhost:8080/wst-server-1.0-SNAPSHOT/services/rest/\",\n \"path\": \"3/orders\",\n \"method\": \"POST\",\n \"statusCode\": \"201\",\n \"statusMessage\": \"Created\"\n }\n ]\n}"
,
하지만 gson.fromJson(json, ClientTask.class);
라인이 예외
POJOs
public class ClientTask {
private String taskTypeId;
private String userId;
private List<ClientTaskRequest> requests;
}
public class ClientTaskRequest {
private String url;
private String path;
private String method;
private String body;
private String statusCode;
private String statusMessage;
private String responseParser;
}
내가 수동으로 로거에 의해 주어진 문자열을 복사 GSON에 그 권리를 넣어 시도하고 일했다
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 486
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:180)
at com.google.gson.Gson.fromJson(Gson.java:755)
at com.google.gson.Gson.fromJson(Gson.java:721)
at com.google.gson.Gson.fromJson(Gson.java:670)
at com.google.gson.Gson.fromJson(Gson.java:642)
at cz.cvut.fit.wst.database.rowmapper.ClientTaskRowMapper.mapRow(ClientTaskRowMapper.java:30)
at cz.cvut.fit.wst.database.rowmapper.ClientTaskRowMapper.mapRow(ClientTaskRowMapper.java:1)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:1)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:648)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:728)
at cz.cvut.fit.wst.database.management.MySqlManager.getClientTask(MySqlManager.java:132)
at cz.cvut.fit.wst.client.rest.RestFrontend.main(RestFrontend.java:29)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 486
at com.google.gson.stream.JsonReader.expect(JsonReader.java:339)
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:168)
... 16 more
가 발생합니다. 왜 이렇게하지 않습니까?
잘못된 JSON은 ... 구문 분석하지 않습니다. 로그에 나와있는 것처럼 유효한 JSON이 없습니다. 모든 유효하지 않은'\ n'과 이스케이프 된 따옴표를 제거해야합니다. –
NM - 잘못 읽었습니다. * JSON을 재분배하고 쓰레기를 받고 있습니다. 아래 매튜의 대답을보십시오. –