0

パラメータ化された @PATH を機能させる方法がわかりません。

これが私のweb.xmlです

<servlet-mapping>
    <servlet-name>JerseyServlet</servlet-name>
    <url-pattern>/ND/*</url-pattern>
</servlet-mapping>

これが私のリソースクラスです:

@Path("/ND")
public class TransactionResource 
{
@Context UriInfo uriInfo;

public TransactionResource() 
{   
}

@GET 
@Produces(MediaType.TEXT_PLAIN)
public String itWorks()
{
    return String.format("Get is OK. %s", DateUtil.now());
}

@GET @Path("/NJ")
@Produces(MediaType.TEXT_PLAIN)
public String itWorksForState()
{
    return String.format("Get is OK for NJ. %s", DateUtil.now());
}

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_XML)
public String addTransaction(Transaction pTransaction) throws Exception
{
    //some code here        
    return "Successful Transmission";
}

URL http://my_web_app:8080/NDで GET または POST を実行すると、両方の方法が正常に機能します。しかし、何らかの理由で、URL http://my_web_app:8080/ND/NJの GET メソッドは常に 404-NotFound を返します。

ここで私は何を間違えましたか?

ありがとう

4

1 に答える 1

0

4 レベルのパスがあります。

  1. サーバー内の Web アプリケーションコンテキストのパス: 多分myapp
  2. web.xml の Jax-Rs サーブレットのパス: ここでは /ND/ ですが、/wsをお勧めします
  3. Resource のパス: クラスの上の最初の @Path。あなたはおそらく持っているはずです@Path("transaction")
  4. 次に、各メソッドの上のオプションの @Path。どのメソッドにも @Path を追加しないとしましょう。

これで @Path("transaction") public class TransactionResource {

    @GET 
    @Produces(MediaType.TEXT_PLAIN)
    public String itWorksForState()
    {
      return String.format("Get is OK for REST. %s", DateUtil.now());
    }
}

Firefox に移動して、次のように入力し http://my_web_app:8080/myapp/ws/transactionます。日付を読む必要があります。

追加する場合

    @Path("morepath")
    @GET 
    @Produces(MediaType.TEXT_PLAIN)
    public String itWorksForState()
    {
      return String.format("Get is OK for REST. %s", DateUtil.now());
    }

それからあなたはに行かなければなりませんhttp://my_web_app:8080/myapp/ws/transaction/morepath

于 2011-10-06T08:26:56.330 に答える