CXF JAXRS-如何将日期作为QueryParam传递
我的服务定义如下。
public String getData(@QueryParam("date") Date date)
我正在尝试java.util.Date
从客户端(它是CXF的jaxrs:client,而不是通用HTTP客户端或浏览器)传递给它。
我的服务接收的日期Thu Mar 01 22:33:10 IST 2012
与HTTP URL中的一样。由于CXF无法Date
使用此String
创建对象,因此我的客户端收到404错误。我曾尝试ParameterHandler
在服务端使用a
,但由于无法预期任何特定格式的日期,因此仍然无法成功解析它。
根据这篇文章,传递a
Date
应该是开箱即用的,但是我似乎无法使基本案例起作用。为了成功将Date对象从客户端传递到服务,我需要做任何事情吗?感谢任何帮助。
谢谢
回答:
问题在于,JAX-RS指示以两种方式之一进行参数解绑:
- 参数bean有一个接受字符串的公共构造函数
- 参数bean具有静态
valueOf(String)
方法。
在您的情况下,Date通过其Date(String)
构造函数进行了捆绑,该构造函数无法处理客户端发送的输入格式。您可以通过几种方法来解决此问题:
让您的客户在发送日期之前更改日期的格式。这是理想的,但可能是最难实现的!
处理疯狂的日期格式。选项包括:
static final DateFormat CRAZY_FORMAT = new SimpleDateFormat("");public String getData(@QueryParam("date") String dateString) {
final Date date;
try {
date = new Date(dateString); // yes, I know this is a deprecated method
} catch(Exception e) {
date = CRAZY_FORMAT.parse(dateString);
}
}
public class DateParameter implements Serializable { public static DateParameter valueOf(String dateString) {
try {
date = new Date(dateString); // yes, I know this is a deprecated method
} catch(Exception e) {
date = CRAZY_FORMAT.parse(dateString);
}
}
private Date date;
// Constructor, Getters, Setters
}
public String getData(@QueryParam("date") DateParameter dateParam) {
final Date date = dateParam.getDate();
}
public class DateHandler implements ParameterHandler<Date> { public Map fromString(String s) {
final Date date;
try {
date = new Date(dateString); // yes, I know this is a deprecated method
} catch(Exception e) {
date = CRAZY_FORMAT.parse(dateString);
}
}
}
以上是 CXF JAXRS-如何将日期作为QueryParam传递 的全部内容, 来源链接: utcz.com/qa/401924.html