以下是我要做的事情:
@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 to Calendar转换。我不想传递String而不是Calendar,因为有其他客户端直接调用java。任何人都可以帮助我如何将日期传递给Rest Calls吗?
由于 韦埃尔
答案 0 :(得分: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)
就是这样。
答案 1 :(得分:-1)
无法使用java.util.Calendar
作为@QueryParam
的参数,因为它没有一个接受String
的one-arg构造函数。你唯一的选择是引入一个新的类QueryCalendar
,它将具有一个arg构造函数,并将返回Calendar
(或继承它)。
有关谁可以成为论点的更多信息:http://docs.oracle.com/javaee/6/api/javax/ws/rs/QueryParam.html