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指示以两种方式之一进行参数解绑:

  1. 参数bean有一个接受字符串的公共构造函数
  2. 参数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

回到顶部