我需要用finatra在camelCase中返回一个json响应,但默认情况下它是在snake_case中。到目前为止,我发现我需要使用ObjectMapper,但是我不能理解一旦我创建了它,我应该把它传递到哪里。举个例子会很有帮助。这就是我所拥有的:
import com.twitter.finagle.http.Request
import com.twitter.finatra.http.Controller
class myTargetingController extends Controller {
val endpoint = "http://....."
get(s"$endpoint/?") { request: Request =>
// what do I do with it?
// val objectMapper = ScalaObjectMapper.builder.camelCaseObjectMapper
response.ok.json(myObject)
}
}=
import com.twitter.finagle.{Service, SimpleFilter}
import com.twitter.finagle.http.{ Request, Response}
import com.twitter.finatra.http.routing.HttpRouter
import com.twitter.finatra.http.{HttpServer}
import com.twitter.finatra.http.filters.CommonFilters
import com.twitter.util.Future
object MyServerApp extends MyServer
class MyServer extends HttpServer {
override protected def configureHttp(router: HttpRouter) {
router
.filter[CommonFilters]
.add[CorsFilter, MyController]
}
}附言:我对Scala非常非常陌生
发布于 2020-04-28 08:42:57
从评论中跟进
定义自定义ObjectMapperModule
class CamelCaseModule extends ScalaObjectMapperModule {
override val propertyNamingStrategy: PropertyNamingStrategy =
new PropertyNamingStrategy.UpperCamelCaseStrategy
override def additionalMapperConfiguration(mapper: ObjectMapper): Unit = {
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true)
}
}覆盖服务器的默认Jackson模块
override def jacksonModule = new CamelCaseModule确保你有
"com.twitter" %% "finatra-jackson" % yourFinatraVersion % "test"在你的build.sbt中
以及您导入的
import com.fasterxml.jackson.databind.{DeserializationFeature, Module, ObjectMapper, PropertyNamingStrategy}
import com.twitter.finatra.jackson.modules.ScalaObjectMapperModule在本地进行了测试,看起来很有效希望这能有所帮助
https://stackoverflow.com/questions/61469866
复制相似问题