我想解开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