相关疑难解决方法(0)

将Map <String,String>转换为POJO

我一直在看杰克逊,但似乎我必须将Map转换为JSON,然后将结果JSON转换为POJO.

有没有办法将Map直接转换为POJO?

json dictionary pojo jackson

150
推荐指数
6
解决办法
13万
查看次数

覆盖unapply方法

我有一个来自库类的case,我想重写unapply方法来减少我需要传递的参数数量来进行模式匹配.我这样做:

object ws1 {
  // a library class
  case class MyClass(a: Int, b: String, c: String, d: Double /* and many more ones*/)

  // my object I created to override unapply of class MyClass
  object MyClass {
    def unapply(x: Int) = Some(x)
  }

  val a = new MyClass(1, "2", "3", 55.0 /* and many more ones*/)
  a match {
    case MyClass(x /*only the first one is vital*/) => x  // java.io.Serializable = …
Run Code Online (Sandbox Code Playgroud)

scala

6
推荐指数
1
解决办法
3266
查看次数

AWS Lambda处理程序抛出带有Scala泛型的ClassCastException

我正在使用其POJO处理程序构建一个AWS lambda函数,但是对RequestHandler接口进行抽象会导致擦除的类型。发生这种情况时,AWS无法转换为我的lambda函数的输入类型:

java.util.LinkedHashMap cannot be cast to com.amazonaws.services.lambda.runtime.events.SNSEvent: java.lang.ClassCastException
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.amazonaws.services.lambda.runtime.events.SNSEvent
Run Code Online (Sandbox Code Playgroud)

以下代码在上载到AWS时适用:

import com.amazonaws.services.lambda.runtime._
import com.amazonaws.services.lambda.runtime.events.SNSEvent

// Only working version
class PojoTest1 extends Handler1[SNSEvent]{
  override def handleRequest(input: SNSEvent, context: Context): Unit =
    println(s"message: ${input.getRecords.get(0).getSNS.getMessage}")
}

trait Handler1[Event] extends RequestHandler[Event, Unit]{
  override def handleRequest(input: Event, context: Context): Unit
}
Run Code Online (Sandbox Code Playgroud)

现在,因为我正在使用Scala,所以我将抽象化具有通用特征的Java RequestHandler。以下是无效的缩小示例:

// Doesn't work
class PojoTest2 extends Handler2[SNSEvent]{
  override def act(input: SNSEvent): Unit =
    println(s"message: ${input.getRecords.get(0).getSNS.getMessage}")
}

trait Handler2[Event] extends RequestHandler[Event, Unit]{ …
Run Code Online (Sandbox Code Playgroud)

scala amazon-web-services aws-lambda

5
推荐指数
1
解决办法
333
查看次数

在Scala中提取json

我有以下数据结构:

val jsonStr = """
     {
      "data1": {
        "field1": "data1",
        "field2": 1.0,
        "field3": true
      },
      "data211": {
        "field1": "data211",
        "field2": 4343.0,
        "field3": false
      },
      "data344": {
        "field1": "data344",
        "field2": 436778.51,
        "field3": true
      },
      "data41": {
        "field1": "data41",
        "field2": 14348.0,
        "field3": true
      }
    }
  """
Run Code Online (Sandbox Code Playgroud)

我想要提取它.这是我正在做的没有任何运气:

#1. 
case class Fields(field1: String, field2: Double, field3: Boolean)
json.extract[Map[String, Map[Fields, String]]]
//org.json4s.package$MappingException: Do not know how to convert JBool(true) 
//into class       java.lang.String

#2.
json.extract[Map[String, Map[String, Fields]]
//java.lang.InternalError: Malformed class name


#3.
json.extract[Map[String, Map[String, Any]]] …
Run Code Online (Sandbox Code Playgroud)

parsing json scala lift lift-json

3
推荐指数
1
解决办法
1万
查看次数