我想解開Json對象,我從Restful Service響應回來。但是在解組的時候拋出異常呢?「內容不被允許在序言中」,而解組Json對象
MyClass.java
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyClass
{
@XmlElement(name="id")
private String id;
@XmlElement(name="f-name")
private String fname;
@XmlElement(name="l-name")
private String lname;
// getters and setters for these
}
解組方法
JAXBContext context = JAXBContext.newInstance(MyClass.class);
Unmarshaller unMarshaller = context.createUnmarshaller();
URL url = new URL("http://localhost:8080/service-location");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");
connection.connect();
MyClass myclass=(MyClass)unMarshaller.unmarshal(connection.getInputStream());
,當我試圖使用一些瀏覽器客戶端我越來越像下面適當的反應。
[
{
"fname": "JOHN",
"lname": "Doe",
"id": "abc123"
}
]
但我試圖做和解組在我的客戶端代碼它拋出SAXParserException
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
我不知道我做錯了。這種方式可以解開JSON對象嗎?或者還有其他方法可以做到嗎?
UPDATE:解
我通過實施Jackson's ObjectMapper
而非JAXB
常規UnMarshaller
固定這一點。這裏是我的代碼
ObjectMapper mapper = new ObjectMapper();
JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, MYClass.class);
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
list = mapper.readValue(jsonString, type); // JsonString is my response converted into String of json data.
您已指定您的JSON作爲數組,嘗試不使用[和] –
我用有效的JSON嘗試作爲一個測試案例。它仍然拋出這個錯誤。 – SRy
@SotiriosDelimanolis ..我測試BOM的但沒有發現任何東西。所以,從這個角度來看,這一切都很好。 – SRy