我正在尝试使用Jersey构建RESTful Web服务。
在我的服务器端代码中,有一个名称为" domain"的路径。我用它来显示内容。页面内容"域名"指的是只能输入正确的用户名和密码。
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("domain")
public ArrayList<String> domainList(@Context HttpServletRequest req) throws Exception{
Environments environments = new DefaultConfigurationBuilder().build();
final ALMProfile profile = new ALMProfile();
profile.setUrl(environments.getAutomation().getAlmProfile().getUrl());
profile.setUsername((String) req.getSession().getAttribute("username"));
//Set username from input, HTML form
profile.setPassword((String) req.getSession().getAttribute("password"));
//Set password from input, HTML form
try (ALMConnection connection = new ALMConnection(profile);) {
if (connection.getOtaConnector().connected()) {
Multimap<String, String> domain = connection.getDomains();
ArrayList<String> domain_names = new ArrayList<String>();
for(String key : domain.keys()){
if(domain_names.contains(key)) domain_names.add(key);
}
return domain_names; //return the content
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
当我试图测试是否返回了正确的内容时,我收到错误(状态= 405,原因=方法不允许)。以下是我的客户端测试。
public static void main(String[] args){
Environments environments = new DefaultConfigurationBuilder().build();
final ALMProfile profile = new ALMProfile();
profile.setUrl(environments.getAutomation().getAlmProfile().getUrl());
profile.setUsername("username"); //Creating a profile with username and password
profile.setPassword("password");
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(getBaseURI());
String response = target.path("domain").request().accept
(MediaType.APPLICATION_JSON).get(Response.class).toString();
//Above is the GET method I see from an example,
//probably is the reason why 405 error comes from.
System.out.println(response);
}
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost:8080/qa-automation-console").build();
}
servlet配置很好。我们有其他路径成功运行。 我怀疑原因可能来自于我使用GET方法来完成应该是POST的工作。 但我不熟悉我可以使用的泽西方法。
有谁知道我可以用来测试功能的任何方法?
答案 0 :(得分:1)
405方法不允许
请求行中指定的方法不允许由Request-URI标识的资源。响应必须包含一个Allow标头,其中包含所请求资源的有效方法列表。
您的终端是针对@POST
请求的。在您的客户端中,您正尝试get()
。
有关Client API documentation的信息,请参阅how to make a POST request。如果 应该是GET请求,那么只需将方法注释更改为@GET
。
另请注意,对于@POST
资源方法,您应始终使用方法支持的媒体类型添加@Consumes
注释。如果客户端发送不支持的媒体类型,则它们将获得不受支持的415。我会发布一个客户帖子的例子,但我不知道你期望什么类型因为缺少注释,你甚至没有post对象作为方法参数所以我甚至不确定如果你的方法真的应该用于POST。
另见: