我创建了Jersey 2.5 Scala REST API项目。
我有一个ResourceConfig文件,我们称之为 MyApplication ,看起来与此类似:
class MyApplication extends ResourceConfig {
packages(classOf[MyResource].getPackage().getName())
}
所有这一切都是注册资源: MyResource 。如何配置Jersey(2.5)以提供开箱即用的JSON序列化/反序列化。
例如,以下是MyResource的样子:
@Path("/")
class MyResource {
@POST
@Produces(Array("application/json"))
@Consumes(Array("application/json"))
def getIt(request:SomeRequestModel) = {
/* Do something with the request, return some response model */
return new SomeResponseModel
}
}
重申一下,我如何配置Jersey分别自动反序列化和序列化请求和响应模型?
答案 0 :(得分:0)
实际上并不是Jersey提供序列化,它只是利用JAX-RS的实现来执行该角色。
假设Jersey是一个严格的要求,这里最简单的解决方案是使用带有Scala绑定的jackson。您可以在此处找到示例:https://bitbucket.org/jordipradel/jersey-scala-example
如果你没有完全依赖泽西......可能我建议尝试使用Spray或spray2-mini代替更加惯用的Scala解决方案吗?
答案 1 :(得分:0)
我在开发Java REST服务时很少使用Jersey。但是,我会说你似乎在混淆两个概念 - 注册JAX-RS提供程序和配置提供程序以序列化/反序列化JSON。
要注册提供商,请使用ResourceConfig
。
关于配置Jersey以“知道”如何序列化/反序列化JSON的第二个问题:
“如第4.3节”自动发现功能“中所述,JSON处理媒体模块是您无需在客户端/服务器中显式注册其功能(JsonProcessingFeature)的模块之一可配置为将jersey-media-json-processing模块添加到类路径时,会自动发现并注册此功能。“
要将该模块的Jackson风格添加到类路径中,您只需手动将其放在那里或使用Maven执行此操作:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.5</version>
</dependency>
我选择了Jackson,因为在我看来它是Java领域中最好的JSON序列化器/解串器。
说完这一切之后,我曾尝试在Scala中使用我首选的Java REST框架RESTEasy编写服务。这比我的第一次约会更尴尬。 Scala和RESTEasy由于成语不匹配,类型问题等原因而无法融合在一起。
如果您想在Scala中编写REST服务,请考虑使用该语言构建的框架,如Scalatra,Unfiltered或Spray。