1

ジャージを使用してRESTサービスを構築していますが、奇妙な例外が発生します。次のようなRESTURIをヒットしたい:

http://localhost:9889/rest/Users/{userid}

リクエストとともに送信されるコンテンツは、JSONで次のようになります。

{
"attr1":"name",
"attr2":"age"
}

エンドポイントのURLコードは次のとおりです。

@Path("/rest/Users")
class Users
{
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        @Path("/{userId}")
        @Consumes(MediaType.APPLICATION_JSON)
        public String getUserInfoQuery(

            QueryDoc reqJSON,

            @PathParam("userId") String userId,

            @HeaderParam("Session-Token") String sessionId,

            @HeaderParam("Authorization") String authToken) 
    )
    {
    .
    .
    .
    .
    }
}

そして、QueryDocリソースは次のようになります。

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class QueryDoc
{

@XmlElement(name = "attr1")
private String attr1;


    @XmlElement(name = "attr2")
    private String attr2;
   //getters and setters
.
.
.
.

}

サーバーを起動すると、例外がスローされます

com.sun.jersey.api.container.ContainerException: Fatal issues found at
class com.test.Users. See logs for more details.
at com.sun.jersey.server.impl.application.WebApplicationImpl.newResourceClass(WebApplicationIm....

私はここhttp://www.skybert.net/java/jersey/でこの例外を見つけることができ ました、そしてこのリンクで言及されているように..理由は

 public String getUserInfoQuery(

            QueryDoc reqJSON,

reqJSONには注釈が付けられていません。何らかの注釈を付けて注釈を付けると、サーバーの起動時に例外はスローされませんが、この場合、URL応答は無意味です。このパラメーターを削除すると、URLは機能しますが、リクエストJSONを消費しません。リクエストのJSONコンテンツとHeaderParamsおよびPathParamsを使用したい場所でそれを機能させるにはどうすればよいですか?

4

3 に答える 3

2

getUserInfoQuery() メソッドに @GET アノテーションが付けられていますか? その場合、HTTP GET 要求にマップされます。HTTP GET でエンティティを送信することはできないため、注釈のないパラメーターは意味がありません (Jersey はエンティティを注釈のないパラメーターにマップしますが、前述のように、GET の場合はエンティティがありません)。

于 2012-09-06T11:52:06.703 に答える
1

getUserInfoQuery()メソッドを に変更します@PUT
クラスで、QueryDocを除くすべての注釈を削除します@XmlRootElement。リクエストボディに渡す属性名は同じなので必須でQueryDoc @XmlElementはありません。また@XmlElement、ge getter メソッドに指定する必要があります。

これは、Jersey を使用した ReST に関する優れた記事です。

于 2012-09-09T17:33:40.857 に答える
0

これを試して:

ジャージーの「newResourceClass」メソッドに関する追加の詳細なしで、同じ例外がありました。何時間ものデバッグの後、あいまいな URI が原因であることに気付きました。

URI を確認し、次のような重複の可能性を排除します。

@Path("/users")
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getUsers() {
    ...
}

@Path("/users") // BAD
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getUserById(@QueryParam("userId") String userId) {
    ...
}
于 2017-01-08T15:12:06.090 に答える