2012-05-12 72 views
2

我正在向球衣测试方法提出发帖要求。但是我总是得到一个错误,不知道怎么回事。我正在使用Tomcat。这个请求有什么问题?

Java代码:

@Path("/users") 
public class UsersResource { 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String sayHello() { 
    return "Hello Jersey Today"; 
} 

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public String createUser(User us) 
{ 
    //System.out.println("userdata " + us); 
    User user = new User("testUserName", "testPassword"); 
    return user.toJson(); 
} 
} 

用户等级:

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 

public class User 
{ 
private String username; 
private String password; 

public User() 
{ 
    super(); 
} 

public User(String name, String pass) 
{ 
    super(); 
    this.username = name; 
    this.password = pass; 
} 

public User(String username) 
{ 
    this.username = username; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public String toJson() 
{ 
    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    String json = gson.toJson(this); 
    return json; 
} 
} 

和JS代码:

$(function() { 

main = { 

    // Start updates 
    start: function(){ 

     var user = {username: "test", password: "pass"}; 
     var encoded = $.toJSON(user); 

     ajaxPost.ajaxRequest("TodoListing/rest/users", user, 
          function(data) 
          { 
           alert("success with data " + data); 
          }, 

          function(jqXHR, textStatus, errorThrown) { 
          alert("error " + textStatus + "/" + errorThrown); 
          }); 

    } 
}, 

// Ajax request. 
ajaxPost = { 
    ajaxRequest: function(service, data, successSelector, errorSelector) { 
     $.ajax({ 
      type: 'POST', 
      url: ajaxPost.serverURL + service, 
      data: data, 
      contentType: "application/json", 
      dataType: "application/json", 
      success: successSelector, 
      error: errorSelector 
     }); 
    }, 
    serverURL: 'http://localhost/', 
}; 

}); 

JS总是返回无描述错误(空errorThrown)和泽西记录错误根据要求:

PM com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator attachTypes 
INFO: Couldn't find JAX-B element for class java.lang.String 
+0

尝试使用[Poster](https://addons.mozilla.org/en-US/firefox/addon/poster/)或curl代替JS发出请求,以便您可以确定它是否真的是服务器问题。 –

回答

2

如果您使用的是Glassfish服务器,那么您需要将com.sun.enterprise.overrideablejavaxpackages设置为JVM。此外还有一个线程在这里:

MultivaluedMap exception

希望这会帮助你。

+0

对不起,忘记提及我正在使用Tomcat。 –

7

我遇到同样的问题,球衣和灰熊始终得到相同的错误。经过2周的研究,似乎这个问题与CORS(跨域)困难有关。

为我的作品就是一个过滤器,提供了一些额外的信息,以响应头解决方案:

import com.sun.jersey.spi.container.ContainerRequest; 
    import com.sun.jersey.spi.container.ContainerResponse; 
    import com.sun.jersey.spi.container.ContainerResponseFilter; 

    class CORSFilter implements ContainerResponseFilter { 

     @Override 
     public ContainerResponse filter(ContainerRequest request, ContainerResponse response) { 
      // instead of "*" you should provide a specific domain name for security reasons 
      response.getHttpHeaders().add("Access-Control-Allow-Origin", "*"); 
      response.getHttpHeaders().add("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS"); 
      response.getHttpHeaders().add("Access-Control-Allow-Headers", "Content-Type"); 
      return response; 
     } 
    } 

引入过滤灰熊:

... 
    ResourceConfig rc = new ClasspathResourceConfig("my.resource.package"); 
    rc.getContainerResponseFilters().add(new CORSFilter()); 
    return GrizzlyServerFactory.createHttpServer("http://base_uri", rc); 
    ... 

也许你可以通过这个到tomcat 。