HTTP状态405 - 不允许的方法(jax-rs服务)

时间:2013-03-07 16:39:13

标签: android rest jersey tomcat7

我遇到jax-rs服务问题,服务返回 HTTP状态405 - 方法不允许。 我从android项目调用serice。

这是我的代码:

服务

@GET
@Consumes(MediaType.TEXT_HTML)
@Produces(MediaType.APPLICATION_JSON)
@Path("login")
public Korisnici Login(@QueryParam("u") String username,@QueryParam("p") String password){

    Korisnici exception = new Korisnici(); 
    try {

        for (Korisnici obj : KorisniciDAO.getInstance().getAll()) {

            if (obj.getUsername().equals(username)


                    && obj.getPassword().equals(password)) {


                return obj;

            }
        }

        return new Korisnici();

    } catch (Exception e) {

        exception.setIme(e.toString());
        return exception;
    }

}

Android中的代码:

public static Boolean Login(Korisnici k) {


String url = "http://myserver.com/AndroidServis/rest/korisnik_servis/login?u={u}&p={p}";


        restTemplate = new RestTemplate();

            headers = new HttpHeaders();
            //headers.set("Accept", "application/json");
            headers.setContentType(MediaType.APPLICATION_JSON);
            params = new HashMap<String, String>();
            params.put("u", k.getUsername().toString());
            params.put("p", k.getPassword().toString());

            entity = new HttpEntity(headers);

            restTemplate.getMessageConverters().add(
                    new GsonHttpMessageConverter());
            restTemplate.getMessageConverters().add(
                new StringHttpMessageConverter());
            HttpEntity<Korisnici> response = restTemplate.exchange(
                    url, HttpMethod.GET, entity,
                    Korisnici.class, params);

            }

我不知道问题在哪里。

1 个答案:

答案 0 :(得分:1)

服务器在@Consumes方法上有@GET注释是没有意义的,因为这通常仅用于PUTPOST个请求客户端正在向服务器发送一些内容。 你能删除吗?

然后还从客户端代码中删除它。

headers.setContentType(MediaType.APPLICATION_JSON);

您可能需要取消注释已注释掉的行:

headers.set("Accept", "application/json");

这告诉服务器响应中预期的内容类型,因此必须与服务的@Produces匹配。