2012-05-12 10 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(); 
} 
} 

Userクラス:

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

JSの代わりに[Poster](https://addons.mozilla.org/en-US/firefox/addon/poster/)またはカールを使用してリクエストを行うことをお試しください。実際にリクエストがあったサーバーかどうかを判断できます問題。 –

答えて

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; 
     } 
    } 

:たぶん、あなたはTomcatにこれを採用することができ

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

を。

関連する問題