Tag: 杰克逊

在Spring项目中将JSON字符串转换为Data Class实例

在控制器函数中,我通过@RequestBody获取JSON作为data class 。 我想将data class存储为字符串,然后将其重新转换为data class 。 我怎么能做到这一点?

我可以通过类型信息来简化这个吗?

我有很多类似这样的代码,除了类型PositionJson ,它们都是一样的,可以是AnotherJson或者FooJson或者BarJson 有什么办法可以将所有这些代码转换成一个函数,我可以以某种方式将它传递给它的类型? 所以我没有几个相同的代码乱七八糟的大块? 我不确定这是否可行,只是以为我会问,因为这将是很好的做… /** * @return the _open_ [PositionJson]s */ val positions: Array<PositionJson>? @Throws(AccountsAPIException::class) get() { val service = constructServiceURL(POSITIONS, null, true) try { val messageJson = mapper.readValue<MessageJson<Array<PositionJson>>>( callURL(service), object: TypeReference<MessageJson<Array<PositionJson>>>() { }) val error = messageJson.error if (error != null) throw AccountsAPIException(error.errorCode, error.description) return messageJson.data } catch (e: Exception) { throw AccountsAPIException(e) […]

如何将Class <?>转换为Class <T>?

我有Class<?>字段的类。 我有一个方法,它必须在Jackson的帮助下将字符串投射到对象上。 private Class<?> myType = …; private String jsonRepresentationOfObject = ….; ObjectMapper mapper = new ObjectMapper(); public <T> T get() { return mapper.readValue(jsonRepresentationOfObject, myType); } 有没有可能将myType为T ? 或者这是不可能的,因为类型擦除?

如何在Kotlin中使用Jackson JsonSubTypes注释

我试图转换一些Java代码,使用杰克逊的@JsonSubTypes注释来管理多态。 这是工作的Java代码: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value = Comment.class, name = "CommentNote"), @JsonSubTypes.Type(value = Photo.class, name = "PhotoNote"), @JsonSubTypes.Type(value = Document.class, name = "DocumentNote") }) public abstract class Note implements Identifiable { […] 这是我认为相当的Kotlin代码: JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") JsonSubTypes( JsonSubTypes.Type(value = javaClass<Comment>(), […]

注册反序列化器以包装类型的List

我有这样的JSON: { "apps": [ { "id": "1", … }, { "id": "2", … } ] } 例如说, Application类看起来像这样 data class Application( val id: String ) 我想将JSON反序列化为List<Application> ,其中每个{…}都是一个Application 。 我希望能够做到这一点,而不必创建一个类似Applications的包装类,用@JsonRootName对其进行@JsonRootName ,然后启用DeserializationFeature.UNWRAP_ROOT_VALUE 。 最终目标是有一个类似于以下内容的Retrofit界面: @GET("api/apps") fun listApplications(): Call<List<Application>> 我试图实现一个简单的JsonDeserializer (可能可以优化): class ApplicationListDeserializer : JsonDeserializer<List<Application>>() { companion object { private val COLLECTION_TYPE: CollectionType = TypeFactory.defaultInstance() .constructCollectionType(List::class.java, Application::class.java) } […]

KMongo序列化的BSONTimestamp

我试图用Kotlins KMongo lib序列化一个BSONTimestamp。 但在MongoDb中,我只能看到它的字符串表示。 "someVal" : { "inc" : 1, "time" : 1495104096 } 我需要给Jackson一些注释来正确地序列化它吗?

如何使用杰克逊反序列化Kotlin集合

示例代码我想要的: data class D(val a: String, val b: Int) val jsonStr = """[{"a": "value1", "b": 1}, {"a": "value2", "b":"2}]""" // what I need val listOfD: List<D> = jacksonObjectMapper().whatMethodAndParameter?

杰克逊@JsonIgnoreProperties多个字段与Kotlin

我无法与kotlin一起使用@JsonIgnoreProperties。 我需要忽略一个以上的属性,而且我看到很多教程/ SO问题,在java中,通常你会这样做: @JsonIgnoreProperties({ "p0", "p1", "p2" }) class Example(){…} 所以在kotlin这将是: @JsonIgnoreProperties(value = arrayOf( "p0", "p1", "p2" )) class Example(){…} JsonIgnoreProperties接口的value字段应接受数组,因为它是这样声明的: public String[] value() default { }; 但编译器抱怨并希望一个字符串,而不是一个数组。 我甚至不能重复注释,所以我应该如何忽略多个字段? 编辑:似乎是一个kotlin缺少的功能,实施自1.2测试版。 可以使用value = ["p0", "p1", "p2"]作为注释。 在1.2 beta之前,可以使用@JsonIgnoreProperties("p0", "p1", "p2") ,没有办法在数组前面加上value =

你如何声明一个使用Jackson XML的JsonTypeInfo.As.WRAPPER_OBJECT的多态字段?

我在一个用Kotlin编写的Android应用程序中接收XML消息,我试图弄清楚如何在不是根节点时使用Jackson的多态反序列化。 这是一个简单的例子。 假设我收到两种类型的消息(“数据”消息和“文本”消息): <MSG> <TT> <id>3</id> <text>hi</text> </TT> </MSG> <MSG> <DT> <id>4</id> <data>93328afd0</data> </DT> </MSG> 消息由它们的包装元素来区分,所以我设置了一些sealed class声明: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) @JsonSubTypes( JsonSubTypes.Type(name = "TT", value = MT.TT::class), JsonSubTypes.Type(name = "DT", value = MT.DT::class)) sealed class MT { data class TT( val id: Int, val text: String ) : MT() data class DT( […]

Spring启动REST服务:JSON反序列化不起作用

我正在使用spring-boot和Kotlin开发一个REST服务。 (我应该提到这是我第一次同时使用)。我无法让杰克逊使用此代码从POST请求反序列化JSON: @RequestMapping("cloudservice/login/{uuid}", method = arrayOf(RequestMethod.POST)) fun login(@PathVariable(value="uuid")uuid: String, @RequestBody user: CloudServiceUser ) : ResponseEntity<CloudServiceUser> { val cloudServiceFactory : Class<CloudServiceFactory> = cloudServiceRepository.cloudServiceExtensions[UUID.fromString(uuid)] ?: throw InvalidPathVariableException("Invalid UUID.") var token : String try { token = cloudServiceFactory.newInstance().authenticationService.login(user.userId, user.password) } catch (e:Exception ){ throw CloudServiceException(e.message) } return ResponseEntity(CloudServiceUser(userId=user.userId, password = "", token = token),HttpStatus.OK) } 用户对象很简单: data class […]