如何使用Jackson使用multiple-arg构造函数序列化scala对象?

时间:2013-07-12 13:59:43

标签: json scala serialization jackson

class AgentResponse[T] @JsonCreator()(@JsonProperty("result") val result: T, @JsonProperty("status") val status: ResponseStatus)

class ResponseStatus @JsonCreator()(@JsonProperty("succeeded") val succeeded: Boolean, @JsonProperty("message") val message: String, @JsonProperty("timeStamp") val timeStamp: Long)

new ObjectMapper().registerModule(DefaultScalaModule).writer().writeValue(out, new AgentResponse(result, new ResponseStatus(true, "OK", now)))

它抛出错误:

JsonMappingException: No serializer found for class com.fg.mail.smtp.rest.Handler$AgentResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )

scala对象应如何按预期工作?

1 个答案:

答案 0 :(得分:3)

引自scala.annotation.meta

  

默认情况下,(val - ,var - 或普通)构造函数参数上的注释最终会出现在参数上,而不会出现在任何其他实体上。默认情况下,字段上的注释仅以字段结束。

     

scala.annotation.meta中的元注释用于控制字段和类参数的注释复制的位置。这是通过使用此包中的一个或多个元注释来注释注释类型或注释类来完成的。

因此注释转到构造函数参数。您需要将它分配给getter以及构造函数参数:

class MyClass @JsonCreator() (@(JsonProperty @getter @param) val arg: String)