使用Jersey在Java RESTful web服务中生成JSON和XML响应
我们有一个方法,它返回一个字符串响应,该响应是使用 org.w3c.dom.Document。因此,默认响应是XML格式的。现在我们还需要支持JSON响应。由于我们使用org.w3c.dom.Document手动准备XML响应,而不是使用POJO,并使用@XmlRootElement对其进行注释,而且我们无法修改遗留代码,因此如何同时支持JSON和XML响应类型使用Jersey在Java RESTful web服务中生成JSON和XML响应,java,json,xml,rest,xml-parsing,Java,Json,Xml,Rest,Xml Parsing,我们有一个方法,它返回一个字符串响应,该响应是使用 org.w3c.dom.Document。因此,默认响应是XML格式的。现在我们还需要支持JSON响应。由于我们使用org.w3c.dom.Document手动准备XML响应,而不是使用POJO,并使用@XmlRootElement对其进行注释,而且我们无法修改遗留代码,因此如何同时支持JSON和XML响应类型 @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
只需像上面那样注释方法,并在请求中使用headerAccept:application/json就会导致错误:Unexpected',我希望您正在查找
public class Main {
public static int PRETTY_PRINT_INDENT_FACTOR = 4;
public static String TEST_XML_STRING =
"<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";
public static void main(String[] args) {
try {
JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
System.out.println(jsonPrettyPrintString);
} catch (JSONException je) {
System.out.println(je.toString());
}
}
}
公共类主{
公共静态整型打印缩进系数=4;
公共静态字符串测试\u XML\u字符串=
“将其转换为JSON”;
公共静态void main(字符串[]args){
试一试{
JSONObject xmlJSONObj=XML.toJSONObject(测试XML字符串);
String jsonPrettyPrintString=xmlJSONObj.toString(漂亮的打印缩进系数);
System.out.println(jsonPrettyPrintString);
}捕获(JSONException je){
System.out.println(je.toString());
}
}
}
您可以使用该逻辑将XML响应转换为JSON,但请记住添加一个if条件,检查响应类型。类似的内容,谢谢@Saurabh jhunhunwala。我们正在检查请求的Accept标头:headers.getRequestHeader(“Accept”).get(0)。如果是application/json,它将返回一个json响应。Else返回xml。