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