代码之家  ›  专栏  ›  技术社区  ›  Nick

将复杂对象注入Jersey中的资源方法

  •  0
  • Nick  · 技术社区  · 7 年前

    我正在用Java8开发一个RESTful服务。我的资源类中有以下方法,它响应 POST 请求。

    @POST
    public Response store(SomeType myInstance){ ... }
    

    通常,如果 json 请求可以直接映射。然而, SomeType

    是否有方法捕获请求、确定类型、构建对象 基类型 然后把它传给 store 方法?我倾向于某种类型的中间件,但我不太确定这些依赖项将如何工作。

    注意:出于安全原因,我可以使用的第三方软件包非常有限。所以我不能使用现成的解决方案。

    1 回复  |  直到 7 年前
        1
  •  1
  •   ilooner    7 年前

    我认为你的用例可以通过Jackson的解决 CustomDeserializer 特色。

    1. 一般的方法是为需要支持的每个传入类型创建一个类。前任。 某种类型1 某种类型2 , 某种类型3 `.
    2. 基类型 父类。
    3. 这个 SomeType 父类应该有一个 自定义反序列化程序 .
    4. 自定义反序列化程序 您可以检查json字段,以确定json应反序列化为什么类型。
    5. 然后你可以使用 JsonParser.readValueAs 方法将json反序列化为所需类型 , 某种类型2
    6. 如果需要从数据库中获取更多数据并填充 , ,及 某种类型3 您可以通过检查对象类型在处理程序中执行此操作。

      @POST
      public Response store(SomeType myInstance) {
         if (myInstance instanceof SomeType1) {
           // fetch from database and populate more fields
         } else if (myInstance instanceof SomeType2) {
           ...
         }
         ...
      }