我遇到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);
}
我不知道问题在哪里。
答案 0 :(得分:1)
服务器在@Consumes
方法上有@GET
注释是没有意义的,因为这通常仅用于PUT
或POST
个请求客户端正在向服务器发送一些内容。
你能删除吗?
然后还从客户端代码中删除它。
headers.setContentType(MediaType.APPLICATION_JSON);
您可能需要取消注释已注释掉的行:
headers.set("Accept", "application/json");
这告诉服务器响应中预期的内容类型,因此必须与服务的@Produces匹配。