测试POST以防止状态= 405的方法是什么?

时间:2015-07-27 17:51:50

标签: java rest jaxb jersey jax-rs

我正在尝试使用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的工作。 但我不熟悉我可以使用的泽西方法。

有谁知道我可以用来测试功能的任何方法?

1 个答案:

答案 0 :(得分:1)

请参阅405 Status Code

  

405方法不允许

     

请求行中指定的方法不允许由Request-URI标识的资源。响应必须包含一个Allow标头,其中包含所请求资源的有效方法列表。

您的终端是针对@POST请求的。在您的客户端中,您正尝试get()

有关Client API documentation的信息,请参阅how to make a POST request。如果 应该是GET请求,那么只需将方法注释更改为@GET

另请注意,对于@POST资源方法,您应始终使用方法支持的媒体类型添加@Consumes注释。如果客户端发送不支持的媒体类型,则它们将获得不受支持的415。我会发布一个客户帖子的例子,但我不知道你期望什么类型因为缺少注释,你甚至没有post对象作为方法参数所以我甚至不确定如果你的方法真的应该用于POST。

另见: