不允许泽西方法405

时间:2013-08-09 13:27:50

标签: java web-services rest jersey jax-rs

我是其他服务的新手。我正在尝试创建一个从客户端接受json字符串的服务。当我使用JQuery调用此服务时,我收到405错误。 下面是ws的Java代码:

@POST
@Path("logevent")
@Consumes(MediaType.APPLICATION_JSON)
public boolean logEvent(String obj)
{
  System.out.println(obj);
  return true;
}

@Path("getdata")
@GET
public String getData()
{
  return "Hello";
}

和发布JSON的jQuery代码是:

var json ="{\"userName\":\"testtest\"}";
var json_data =  JSON.stringify(json);

$.ajax({
    type: "POST",
    url: "http://localhost:8080/log/log/logevent",
    // The key needs to match your method's input parameter (case-sensitive).
     data: json_data,
    contentType: "application/json",
    dataType: "json",
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }

出了什么问题?该帖子无效,但是当我使用网址http://<serverip>/log/log/getdata点击获取时,我收到了回复。

2 个答案:

答案 0 :(得分:2)

JSON MessageBodyReader能够将JSON流解组为JAXB bean(或POJO),但不能解析为String。创建一个JAXB bean,如:

@XmlRootElement
public class User {

    private String userName;

    public String getUserName() {
        return userName;
    }

    public void setUserName(final String userName) {
        this.userName = userName;
    }
}

并将您的POST资源方法更改为:

@POST
@Path("logevent")
@Consumes(MediaType.APPLICATION_JSON)
public boolean logEvent(User obj) {}

答案 1 :(得分:0)

首先确保路径为/log/log/logevent

然后尝试更改请求/响应类型:

你应该使用application/json;charset=UTF-8(W3C XHR规范),而且你的web服务不响应JSON但是ouptut一个布尔值,也许你应该改变响应类型。

例如使用UTF-8:

<强> JAX-RS

@Consumes("application/json;charset=UTF-8")

<强>的jQuery

contentType:"application/json;charset=UTF-8"