urlencode 形式的泽西乔达时间 ISO 8601 参数

2024-02-13

我正在使用 Jersey: 1.17.1 并定义了接受“application/x-www-form-urlencoded”的 REST 服务。我想接受 ISO-8601 格式的参数“b”,并让 Jersey 将其映射到 Joda DateTime。

@PUT
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response createTask(@FormParam("a") String a, @FormParam("b") DateTime b) {
...

但我得到了这个例外

SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public de.ast.mae.rest.util.response.Response de.ast.mae.rest.service.tasks.TasksAdminRestService.createTask(java.lang.String,org.joda.time.DateTime) at parameter at index 6
SEVERE: Missing dependency for method public de.ast.mae.rest.util.response.Response de.ast.mae.rest.service.tasks.TasksAdminRestService.createTask(java.lang.String,org.joda.time.DateTime) at parameter at index 6
SEVERE: Method, public de.ast.mae.rest.util.response.Response de.ast.mae.rest.service.tasks.TasksAdminRestService.createTask(java.lang.String,java.lang.String,org.joda.time.DateTime), annotated with PUT of resource, class de.ast.mae.rest.service.tasks.TasksAdminRestService, is not recognized as valid resource method.
Okt 09, 2013 5:54:41 PM com.sun.jersey.spi.spring.container.servlet.SpringServlet initiate
SEVERE: Exception occurred when intialization
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)

我需要做什么才能使这项工作成功?

答案是:我首先升级到JAX-RS 2.0,然后使用:

@Provider
public class DateTimeParamConverterProvider implements ParamConverterProvider {

    @Override
    public <T> ParamConverter<T> getConverter(Class<T> type, Type genericType, Annotation[] annotations) {
        if (type.equals(DateTime.class)) {
            return (ParamConverter<T>) new DateTimeParamConverter();
        } else {
            return null;
        }

    }

    private static class DateTimeParamConverter implements ParamConverter<DateTime> {
        @Override
        public DateTime fromString(String value) {
            try {
                return ISODateTimeFormat.dateTimeNoMillis().parseDateTime(value);
            } catch (IllegalArgumentException e) {
                return ISODateTimeFormat.dateTime().parseDateTime(value);
            }
        }

        @Override
        public String toString(DateTime value) {
            return value.toString();
        }

    }
}

您可以使用下一个解决方案:

@PUT
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response createTask(@FormParam("a") String a, @FormParam("b") String b) 
{
   final DateTime date = ISODateTimeFormat.basicDate().parse(b);
   // ...

basicDate()有格式yyyyMMdd.
您可以找到适合您案例的格式here http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html
EDIT
From 泽西岛文档 https://jersey.java.net/documentation/latest/user-guide.html

一般来说,方法参数的 Java 类型可以:

  1. 是一个原始类型;

  2. 有一个接受单个 String 参数的构造函数;

  3. 有一个名为 valueOf 或 fromString 的静态方法,它接受单个 字符串参数(例如,参见 Integer.valueOf(String) 和 java.util.UUID.fromString(String));

  4. 已注册实施 javax.ws.rs.ext.ParamConverterProvider JAX-RS 扩展 SPI 返回一个 javax.ws.rs.ext.ParamConverter 实例,能够执行“from string”类型的转换。或者

  5. 是List、Set或SortedSet,其中T满足上面的2或3。 生成的集合是只读的。

所以,可能的解决方案是2 and 4.\

创建班级ISODateAsString并使用作为参数

public class ISODateAsString
{
   DateTime dateTime;
   public DateAsString(String date)
   {
      dateTime= ISODateTimeFormat.basicDate().parse(date);
   }
   //...
}  

Or use ParamConverterProvider and ParamConverter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

urlencode 形式的泽西乔达时间 ISO 8601 参数 的相关文章

随机推荐

  • 如何检查某种情况是否持续超过 15 分钟?

    以下是数据集的示例 Date Value 2020 01 01 01 35 50 2020 01 01 01 41 49 2020 01 01 01 46 50 我想检查连续 15 分钟的 值 是否等于 50 如果是 我想提取它发生的日期
  • 触摸事件 (touchesMoved) 不适用于 UIScrollView 内的 UIView

    我有一个UIView里面一个UIScrollView 以及UIViewControllers对于那些没有接收触摸事件的视图 如果我将视图从滚动视图中取出 那么它就可以工作 UserInteraction 在所有视图中都是默认打开的 但它仍然
  • 如何授予特定用户对特定节点的编辑权限?

    如何授予特定用户对特定节点的编辑权限 我有一个名为 学生 的用户角色 多个用户具有该角色 但只有少数用户可以编辑节点 我怎样才能意识到这一点 我将尝试介绍一些用例 以及如何解决它们 If all members of a category
  • 插入行并获取生成的 ID

    我正在尝试使用 Spring 的JdbcTemplate类将行插入到名为的 MySQL 表中transaction并获取生成的ID 相关代码是 public Transaction insertTransaction final Trans
  • 如何使用 Objective C 更改 iOS 设备的系统壁纸/背景?

    我很好奇是否可以通过您自己的应用程序以编程方式更改 iOS 设备的系统壁纸 背景 Apple 不提供公共 API 来执行此操作 用户必须通过 设置 应用程序选择要用作壁纸的图片 您可以让您的应用将图片保存到用户保存的照片中 并指示用户手动更
  • 如何在 Symfony 2.0 中使用元标签

    我不知道如何在我网站的所有页面中添加元标签 正确的 您可以将元标记放入网站的基本布局中 对于更复杂的愿望 您可以将它们放入一个块中 如果您愿意 您可以在特定模板中覆盖它们 有关更多信息 请查看 Symfony2 文档创建和使用模板 http
  • Javascript 正则表达式模式 \W 是否包含空格?

    我正在使用这个表达 W g匹配除数字 字母和空格之外的所有字符 好像是包含空格的 我将如何构建一个不包含空格的正则表达式 a z0 9 s ig 解释 Character class which matches characters NOT
  • 找到沿两个平面相交的线

    我试图在 3D 中绘制由两个平面相交形成的线 但我无法理解数学 这已被解释过here http mathinsight org intersecting planes examples and here http mathworld wol
  • 如何使用 Espresso 点击 Android 图库

    我们目前正在使用 Espresso 测试一个 Android 应用程序 我们要测试的功能之一是从本地图片库中选择图片 图像 我们可以一路调出图库视图 但无法在结果窗口中从 最近 下载 图库 中进行选择 下面包含了我们如何取得如此进展的一个片
  • Watir Webdriver 计算 UL 列表中的项目数量

    我进行了一些搜索 但无法找到合适的答案 基本上我有一个长度不同的无序列表 我想遍历列表 做一些其他事情 然后返回并选择列表中的下一个项目 当我定义循环应该迭代的次数时 我可以很好地做到这一点 因为我知道列表中的项目数量 但是我不想为每个测试
  • python 3,尝试从多个 HID 输入读取,Raspberry Pi

    我有一个条形码扫描仪连接到我的 RasPi 没有任何 tty 这意味着没有显示器的无头 换句话说 数字输入的键盘记录器 该扫描仪可读取 GTIN 或 EAN 等数字条形码 它有效 脚本在启动时由 sh 启动 我使用的脚本如下所示 impor
  • 合并多个 BatchEncoding 或从 BatchEncoding 对象列表创建张量流数据集

    在标记标记任务中 我使用转换器标记生成器 它输出 BatchEncoding 类的对象 我分别对每个文本进行标记 因为我需要从文本中提取标签并在标记后重新排列它们 由于子标记 但是 我找不到一种方法可以从 BatchEncoding 对象列
  • 如何通知其他应用程序我的应用程序是 Windows 桌面的一部分?

    我想在 C 中为 Windows 创建一个 工具栏 并希望将其放置在 Windows 桌面的顶部空间 我希望其他 Windows 程序无法覆盖我的应用程序 我还希望其他应用程序将我的窗口视为桌面的一部分 以便当它们最大化时 您仍然可以看到我
  • Matlab调试:跳过下一行而不执行

    问题 问题的完整描述如下 有人对如何欺骗 Matlab 跳过一行或多行代码有建议吗 mex java 重写一些内部Matlab功能 有谁知道在哪里db 代码文件可能位于 如果存在 Matlab 中有几个函数可以在调试 运行程序时进行流量控制
  • 将所有提交导出到 ZIP 文件或目录中

    如何将所有提交导出到 ZIP 文件 包含全部文件 不仅仅是补丁 差异 myproject commit1 67d91ab zip myproject commit2 9283acd zip myproject commit3 c57daa6
  • 子集参数在 pandas.io.formats.style.Styler.format 中起什么作用?

    的公共文档pandas io formats style Styler format https pandas pydata org pandas docs stable reference api pandas io formats st
  • 实际上撤消 git stash pop

    这个问题 https stackoverflow com questions 20038056 undo git stash pop有相同的标题 但它是NOT同样的问题 这个问题实际上是在问 丢弃 git stash pop 的结果 这个问
  • 互联网是否需要身份验证才能实际连接才能下载?

    我的应用程序需要使用互联网连接从链接下载一些文件 我有一个使用代理并需要身份验证的互联网连接 不知何故 当我尝试连接到互联网时 它从不要求进行此身份验证 因此无法下载文件 我想问的是 有什么方法可以检测用户的互联网连接是否需要身份验证才能从
  • 如何启用枚举继承

    我正在编写一个库 其中有一组预定义的枚举值 比方说 我的枚举如下所示 public enum EnumClass FIRST first SECOND second THIRD third private String httpMethod
  • urlencode 形式的泽西乔达时间 ISO 8601 参数

    我正在使用 Jersey 1 17 1 并定义了接受 application x www form urlencoded 的 REST 服务 我想接受 ISO 8601 格式的参数 b 并让 Jersey 将其映射到 Joda DateTi