Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反序列化JSON以将[String,SomeJavaObject]映射到Spring、Scala和Jackson_Java_Json_Spring_Scala_Jackson - Fatal编程技术网

反序列化JSON以将[String,SomeJavaObject]映射到Spring、Scala和Jackson

反序列化JSON以将[String,SomeJavaObject]映射到Spring、Scala和Jackson,java,json,spring,scala,jackson,Java,Json,Spring,Scala,Jackson,我刚刚开始尝试Scala,并尝试在现有的Java/Spring应用程序中使用它,该应用程序包含Jackson 2.3.1和Jackson模块Scala 我正在尝试反序列化JSON,例如以下内容,以String到Color对象的Map结束,但当我运行下面的代码时,我以String到Map结束: { "1A-X": { "c": 0, "m": 0, "y": 0, "k": 0, "r": 255, "g": 255, "b": 255

我刚刚开始尝试Scala,并尝试在现有的Java/Spring应用程序中使用它,该应用程序包含Jackson 2.3.1和Jackson模块Scala

我正在尝试反序列化JSON,例如以下内容,以
String
Color
对象的
Map
结束,但当我运行下面的代码时,我以
String
Map
结束:

{
  "1A-X": {
    "c": 0,
    "m": 0,
    "y": 0,
    "k": 0,
    "r": 255,
    "g": 255,
    "b": 255
  }
}
为什么生成的贴图的值是另一个贴图而不是颜色对象?

Color
是一个现有的Java类,带有
@JsonCreator
注释构造函数

@RequestMapping(Array("/swatches"))
def setSwatches(@RequestBody swatches: Map[String, Color]) = {
  println(swatches)
  println("Map class " + swatches.getClass + ", key class " + swatches.get("1A-X").get.getClass)
}
将上述JSON传递给此代码的输出如下:

Map(1A-X -> Map(y -> 1, m -> 1, b -> 51, g -> 1, c -> 1, r -> 5, k -> 1))
Map class class scala.collection.immutable.Map$Map1, key class class scala.collection.immutable.HashMap$HashTrieMap
如果我只是直接传入一个颜色,而没有将代码传递到颜色映射,那么反序列化的效果与预期的一样

请让我知道如何直接反序列化以成功映射[字符串,颜色]

更多细节 Color.java
这个问题的根本原因似乎不是Scala特有的,尽管Scala模块目前不支持解决这个问题的方法

关于这个主题还有一个问题,表明Spring在反序列化泛型类型时没有向Jackson提供完全指定的类型信息;Spring实际上是在告诉Jackson反序列化一个
映射[\u,\u]

此处和其他地方提到的解决方法是创建所需类型的派生类,并将其用作方法参数:

class ColorMap extends java.util.HashMap[String,Color]
@RequestMapping(Array("/swatches"))
def setSwatches(@RequestBody swatches: ColorMap) = ...
这适用于Java集合,但事实证明Scala模块不正确支持此用例。此缺陷跟踪为


在Scala模块实现奇偶校验之前,或者在Spring纠正其类型传播之前,您将需要使用Java集合的派生类,如上所述。

这里没有足够的信息。
Color
类是什么样子的?当您“将
颜色
直接传入”(有效的用例)时,JSON看起来是什么样子的?谢谢Christopher。我在上面添加了Color.java的代码。我在尝试绑定到ListMap时也遇到了一些问题(试图维护CMYKRGB键的顺序),因此我遇到的问题可能与我的Java颜色类无关。
{
  "c": 0,
  "m": 0,
  "y": 0,
  "k": 0,
  "r": 255,
  "g": 255,
  "b": 255
}
class ColorMap extends java.util.HashMap[String,Color]
@RequestMapping(Array("/swatches"))
def setSwatches(@RequestBody swatches: ColorMap) = ...