2014-01-02 4 views
0

Я создал проект API API Scala REST 2.5.Поддержка сериализации Scala JSON в Джерси 2.5

У меня есть файл ResourceConfig, мы будем называть его MyApplication, который выглядит примерно так:

class MyApplication extends ResourceConfig { 
    packages(classOf[MyResource].getPackage().getName()) 
} 

Все это делает зарегистрировать ресурс: MyResource. Как настроить Джерси (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 
    } 

} 

Так повторить, как я могу настроить Джерси автоматически десериализации и сериализации модели запроса и ответа, соответственно?

ответ

0

На самом деле это не Джерси, которая обеспечивает сериализацию, она просто использует реализацию JAX-RS для выполнения этой роли.

Предполагая, что Джерси является строгим требованием, самым простым решением здесь является использование джексона с привязками Scala. Вы можете найти пример: https://bitbucket.org/jordipradel/jersey-scala-example

Если вы не полностью привязаны к Джерси ... Могу я предложить попробовать либо Spray, либо spray2-mini вместо гораздо более идиоматического решения Scala?

+0

Я новый мир JVM, исходящий из .NET. Есть ли какая-либо документация о том, как «переопределить» стратегию сериализации по умолчанию? – ehftwelve

0

Я использовал Джерси мало при разработке услуг Java REST. Тем не менее, я бы сказал, что вы, похоже, объединяете две концепции - регистрацию поставщиков JAX-RS и настройку поставщиков для сериализации/десериализации JSON.

Чтобы зарегистрировать провайдер, вы используете ResourceConfig, как и вы.

Что касается второго вопроса о настройке Джерси, чтобы «знать», как сериализации/десериализации JSON:

"Как указано в разделе 4.3,„Авто-Видимый Особенности“модуль JSON-обработки медиа является одним из модули, в которых вам не нужно явно регистрировать свои функции (JsonProcessingFeature) на вашем клиенте/сервере. Настраивается, поскольку эта функция автоматически открывается и регистрируется, когда вы добавляете модуль обработки jersey-media-json в свой класс. «

Чтобы добавить Джексонский аромат этого модуля к пути к классам, вы просто вручную его поместите или сделайте это с помощью Maven:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.5</version> 
</dependency> 

Я выбрал Джексона, потому что это, на мой взгляд, лучший сериализатор/десериализатор JSON в области Java.

Сказав все это, я как-то экспериментировал с написанием услуг с помощью моей предпочтительной структуры REST Java RESTEasy в Scala. Это было более неудобно, чем мое первое свидание. Scala и RESTEasy просто не подходят друг другу из-за несоответствия идиомы, проблем с типами и т. Д.

Если вы хотите написать службы REST в Scala, пожалуйста, рассмотрите рамки, построенные с учетом языка, такие как Scalatra, Unfiltered, или Spray.

Смежные вопросы