2

これが私がやろうとしていることです:

@POST
@Path("/MyPath")
@Produces("text/xml")
@RolesAllowed({"user"})
public Output myMethod (@QueryParam("itemId") long ItemId, 
                                    @QueryParam("plannedstartdate") Calendar plannedStartDate, 
                                    @QueryParam("plannedreturndate") Calendar plannedReturnDate)

JBoss AS7 を使用しています。私の知る限り、resteasy は JBoss AS7 に統合されています。簡単な休憩サービスを実行できます。

日付を渡すことについて私が見つけた唯一のドキュメントはリンクにあります: http://docs.jboss.org/resteasy/2.0.0.GA/userguide/html/StringConverter.html#StringParamUnmarshaller

指示が明確でないため、これに従って問題を解決することができません。例に示されているように注釈 DateFormat を作成しようとすると、StringParamUnmarshaller が認識されません。どこから入手できるかわかりません。resteasy がすでに JBoss AS7 に統合されている場合、これは認識されないのでしょうか?

私の pom.xml には次の依存関係があります。

  <!-- Import the JAX-RS API, we use provided scope as the API is included 
     in JBoss AS 7 -->
  <dependency>
     <groupId>org.jboss.spec.javax.ws.rs</groupId>
     <artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
     <scope>provided</scope>
  </dependency>

String から Calendar への変換が行われないため、このメソッドの呼び出しは失敗します。Java を直接呼び出すクライアントが他にもあるため、Calendar の代わりに String を渡したくありません。Rest Callsに日付を渡す方法を手伝ってくれる人はいますか?

ありがとう

4

2 に答える 2

5

この問題は解決されました。次のコードを参照してください。

アノテーション クラスを作成しますCalendarFormat.java

@Retention(RUNTIME)
@StringParameterUnmarshallerBinder(CalendarFormatter.class)
public @interface CalendarFormat {
    String value();
}

クラスを追加しCalendarFormatter.javaます:

public class CalendarFormatter implements StringParameterUnmarshaller<Calendar> {
    private SimpleDateFormat formatter;

    public void setAnnotations(Annotation[] annotations) {
        CalendarFormat format = FindAnnotation.findAnnotation(annotations, CalendarFormat.class);
        formatter = new SimpleDateFormat(format.value());
    }

    public Calendar fromString(String str) {
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(formatter.parse(str));
            return cal;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

POMに追加

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>2.3.3.Final</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-multipart-provider</artifactId>
    <version>2.3.4.Final</version>
    <exclusions>
        <exclusion>
            <artifactId>resteasy-jaxrs</artifactId>
            <groupId>org.jboss.resteasy</groupId>
        </exclusion>
    </exclusions>
</dependency>

アノテーションを使用するようにメソッド シグネチャを変更する

@POST
@Path("/MyPath")
@Produces("text/xml")
@RolesAllowed({"user"})
public Output myMethod(@QueryParam("itemId") long ItemId,            
        @QueryParam("plannedstartdate") @CalendarFormat("MM-dd-yyyy") Calendar plannedStartDate, 
        @QueryParam("plannedreturndate") @CalendarFormat("MM-dd-yyyy") Calendar plannedReturnDate)

それでおしまい。

于 2012-12-05T23:41:24.420 に答える
-1

を受け入れる 1 つの引数のコンストラクタがないためjava.util.Calendar、 の引数として使用することはできません。あなたが持っている唯一のオプションは、引数が1つのコンストラクターを持ち、それを返す(または継承する)新しいクラスを導入することです。@QueryParamStringQueryCalendarCalendar

誰が引数になるかについての詳細: http://docs.oracle.com/javaee/6/api/javax/ws/rs/QueryParam.html

于 2012-12-05T14:50:57.250 に答える