繁体   English   中英

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

[英]Inject complex object into resource method in Jersey

我正在使用Java 8开发RESTful服务。我的资源类中具有以下方法,该方法可响应POST请求。

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

通常,在可以直接映射json请求的情况下,可以轻松进行此序列化。 但是,在这种情况下, SomeType是一个复杂的对象,其中包含持久保存在数据库中的其他对象。

有没有一种方法可以捕获请求,弄清楚类型,构建对象SomeType ,然后将其传递给store方法? 我倾向于某种类型的中间件,但是我不太确定依赖项将如何工作。

注意:出于安全原因,我在可以使用的第三方包装中非常有限。 所以我不能使用开箱即用的解决方案。

我认为您的用例可以通过Jackson的CustomDeserializer功能解决。

  1. 一般方法是为您需要支持的每种传入类型创建一个类。 防爆。 SomeType1SomeType2SomeType3`
  2. 所有这些类都应扩展SomeType父类。
  3. SomeType父类应具有CustomDeserializer
  4. CustomDeserializer中,您可以检查json字段以确定应将json反序列化为哪种类型。
  5. 然后,您可以使用JsonParser.readValueAs方法将json反序列化为所需的类型SomeType1SomeType2SomeType3
  6. 如果您需要从数据库中获取更多数据并填充SomeType1SomeType2SomeType3的字段, 可以在处理程序中通过检查对象类型来做到这一点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM