我试图通过REST使用SCM Manager(v1.46)发布XML内容。从命令行使用cURL工作正常:
call curl -XPOST -u scmadmin:scmadmin -H "content-type: application/xml" -d "<users><name>abc</name><active>true</active><password>abc</password><displayName>abc</displayName><mail>abc@abc.com</mail><type>xml</type><lastModified/><creationDate/><admin>false</admin></users>" http://localhost:8080/scm/api/rest/users.xml
创建用户 abc 。我的Java客户端使用Jersey从SCM Manager获得 415 Unsupported Media Type 响应。客户端看起来像这样:
...
public WebResource getService(String p_url, String p_user, String p_password) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
client.addFilter(new HTTPBasicAuthFilter(p_user, p_password));
return client.resource(getBaseURI(p_url));
}
...
public Document postXmlDocument(String p_url, String p_user, String p_password, String p_xml) {
WebResource service = getService(p_url, p_user, p_password);
Document xmlDocument = null;
ClientResponse response = service.accept(MediaType.APPLICATION_XML).post(ClientResponse.class, p_xml);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
String output = response.getEntity(String.class);
System.out.println("Server response : \n");
System.out.println(output);
return xmlDocument;
}
其中 p_xml 获取与cURL命令相同的内容。是否可以使用 MediaType.APPLICATION_XML 设置接受的媒体类型?使用过的泽西岛有这个Maven坐标:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.12</version>
</dependency>
任何提示都会很好。 SK
答案 0 :(得分:0)
Accept
只说出你想要的类型。您需要设置Content-Type
以告诉服务器您要发送的类型。如果不这样做,它将默认为某种意外类型。例如,如果您发送一个字符串,它可能默认为Content-Type: text/plain
。服务器无法将纯文本转换为您的POJO,因此您将获得415不支持的媒体类型。
您致电type(String|MediaType)
设置内容类型,或使用header(String, String)
service.accept(MediaType.APPLICATION_XML).type("application/xml")..
service.accept(MediaType.APPLICATION_XML).header("Content-Type", "application/xml")...