Im new to Akka framework and i get the below error message when im trying to run my code.
The method which is called through the api code returns a
Future[List[HashMap[String,Object]]]
The api code(akka-http route) which calls this method:
@GET
@Path("getList/{name}")
@Authorization("basicAuth")
@Operation(summary = "Get list", description = "Returns a list",
parameters = Array(new Parameter(name = "name", in = ParameterIn.PATH, description = "name", required=true)),
security = Array(new SecurityRequirement(name="basicAuth")),
)
def getList: Route = {
path("getList" / Segment) { name =>
get {
complete(getListService(name))
}
}
}
I get the below error message
type mismatch;
found : scala.concurrent.Future[List[scala.collection.immutable.HashMap[String,Object]]]
required: akka.http.scaladsl.marshalling.ToResponseMarshallable
complete(getList(param))
returning a future should not be giving this error, i'm a bit confused as im not able to pinpoint where the mistake is. Any suggestions would greatly help.Kindly let me know if any more info is required.
CodePudding user response:
It requires an entity that it can serialize to JSON. HashMap[String, Object]
isn't something that Akka is able to serialize out of the box. You have to either change the return type to something other than Object
or define a custom marshaller. I doubt that you need an Object
serializer, you probably want to have some class here instead. Here you have examples of serialization using spray: https://doc.akka.io/docs/akka-http/current/common/json-support.html