是jersey的新手。我试图使用泽西电话发布两个表单数据。以下是我的代码,
public class Test {
private static String baseuri = "http://json/authenticate";
/**
* @param args
*/
public static void main(String[] args) {
try {
Client client = Client.create();
WebResource webResource = client.resource(baseuri);
MultivaluedMap<String, String> postBody = new MultivaluedMapImpl();
postBody.add("X-Username", "admin");
postBody.add("X-Password", "password");
ClientResponse response = webResource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
.post(ClientResponse.class, postBody);
// check response status code
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
// display response
String output = response.getEntity(String.class);
System.out.println("Output from Server .... ");
System.out.println(output + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
}
在尝试运行此代码时,我收到以下错误
java.lang.RuntimeException:失败:HTTP错误代码:415。
请任何人帮助我......谢谢。
答案 0 :(得分:1)
使用url编码的表单类型,我们需要以特定的方式格式化主体。作为州here
控件名称/值按它们在文档中出现的顺序列出。该名称与值
=
分隔开来,名称/值对由&
分隔开来。
所以基本上,数据应该以{{1}}的形式发送,任何特殊字符都应该是url编码的。在您的情况下,没有特殊字符,因此我们不需要任何编码,只需格式化。因此,您的客户请求可能看起来更像
key1=value2&key2=value2
在服务器端,您需要确保资源也接受(WebResource resource = client.resource(Main.BASE_URI).path("form");
String username = "user";
String password = "pass";
StringBuilder builder = new StringBuilder();
builder.append("X-Username").append("=").append(username).append("&");
builder.append("X-Password").append("=").append(password);
ClientResponse response = resource
.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
.post(ClientResponse.class, builder.toString());
String msg = response.getEntity(String.class);
System.out.println(msg);
response.close();
)@Consumes
类型数据,并且有MediaType.APPLICATION_FORM_URLENCODED
个注释来提取值(我们也可以@FormParam
,但是为了便于访问,我们可以使用注释。所以你的资源类可能看起来像
MultivalueMap
如果所有其他基础设施部件都正常工作,这应该可以正常工作。
注意:如果你做有任何需要编码的特殊字符,你可以简单地使用@Path("/form")
public class FormResource {
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response doForm(@FormParam("X-Username") String username,
@FormParam("X-Password") String password) {
return Response.ok("Good job " + username + "!").build();
}
}
并使用java.net.URLEncoder