Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.comarch.iaa.bd.servicescore.utils
- import akka.http.javadsl.marshallers.jackson.Jackson
- import akka.http.javadsl.model.{StatusCode, StatusCodes}
- import akka.http.javadsl.server.Directives.complete
- import akka.http.javadsl.server.directives.RouteAdapter
- import akka.http.scaladsl.server.Route
- import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, PredefinedFromEntityUnmarshallers}
- import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility
- import com.fasterxml.jackson.annotation.PropertyAccessor
- import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
- import com.fasterxml.jackson.datatype.guava.GuavaModule
- import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
- trait JavaObjectMarshaller {
- val DefaultMapper: ObjectMapper = new ObjectMapper()
- .registerModule(new Jdk8Module())
- .registerModule(new GuavaModule())
- .setVisibility(PropertyAccessor.FIELD, Visibility.ANY)
- .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
- def completeWithJavaObject[T](inputObject: T, statusCode: StatusCode = StatusCodes.OK, mapper: ObjectMapper = DefaultMapper): Route = {
- val function: Function[T, RouteAdapter] = value => complete(statusCode, value, Jackson.marshaller[T](mapper))
- function(inputObject).delegate
- }
- def unmarshaller[T](cl: Class[T]): FromEntityUnmarshaller[T] =
- PredefinedFromEntityUnmarshallers.stringUnmarshaller map { str =>
- DefaultMapper.readValue(str, cl)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement