Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Java将对象映射到几个JSON变体_Java_Json_Serialization_Jackson - Fatal编程技术网

Java将对象映射到几个JSON变体

Java将对象映射到几个JSON变体,java,json,serialization,jackson,Java,Json,Serialization,Jackson,如何将域对象映射到多个变量JSON对象(多个DTO),而不使用链域对象->DTO->JSON?我有一个大域对象和十多个表示变体。当我用structMap将域对象映射到特定的DTO,然后用jackson对JSON进行序列化时,我花费了很多时间 有没有工具可以将域对象映射到没有中间层DTO的服务器变体JSON 这实际上取决于你的十多个变种是什么样的。有时,坚持DTO可能是最好的方法,如本文所述,其中使用DTO定义RESTAPI的契约 或者,根据你的需要,你可以和杰克逊一起玩。使用弹簧?这可能会给你一

如何将域对象映射到多个变量JSON对象(多个DTO),而不使用链域对象->DTO->JSON?我有一个大域对象和十多个表示变体。当我用
structMap
将域对象映射到特定的DTO,然后用jackson对JSON进行序列化时,我花费了很多时间


有没有工具可以将域对象映射到没有中间层DTO的服务器变体JSON

这实际上取决于你的十多个变种是什么样的。有时,坚持DTO可能是最好的方法,如本文所述,其中使用DTO定义RESTAPI的契约


或者,根据你的需要,你可以和杰克逊一起玩。使用弹簧?这可能会给你一些见解。

这实际上取决于你的十多个变体是什么样的。有时,坚持DTO可能是最好的方法,如本文所述,其中使用DTO定义RESTAPI的契约


或者,根据你的需要,你可以和杰克逊一起玩。使用弹簧?这可能会给您一些见解。

我不太了解您的用例,但请注意,如果您使用Jackson,我假定您使用的是
ObjectMapper
ObjectMapper
是一个昂贵的对象,您应该尽可能地重用它(因此,将其声明为
static
final
),因为当同一对象被多次转换时,它会在场景后面进行大量缓存

更好的是,从
ObjectMapper
获取一个
ObjectWriter
和/或
ObjectReader
,它们是不可变的,并且是线程安全的(ObjectMapper在运行时要更改其配置是很棘手的),它们应该可以提高您的性能

最后一件事,但我从来没有走那么远,您可以编写自定义序列化程序/反序列化程序,但我看到复杂性明显增加(因此,要保持它将更加困难)


如果您正在使用字符串,请仔细检查您是否使用StringBuilder(或多线程用例上的StringBuffer)并仅在必要时进行日志记录(
If(logger.isDebugEnabled(){log.debug(…)}
),它们是降低性能的常见陷阱。

我不太了解您的用例,但请注意,如果您使用Jackson,我假定您使用的是
ObjectMapper
ObjectMapper
是一个昂贵的对象,您应该尽可能地重用它(因此,声明它是
静态的
最终的
),因为当同一对象被多次转换时,它会在场景后面进行大量缓存

更好的是,从
ObjectMapper
获取一个
ObjectWriter
和/或
ObjectReader
,它们是不可变的,并且是线程安全的(ObjectMapper在运行时要更改其配置是很棘手的),它们应该可以提高您的性能

最后一件事,但我从来没有走那么远,您可以编写自定义序列化程序/反序列化程序,但我看到复杂性明显增加(因此,要保持它将更加困难)


如果您正在使用字符串,请仔细检查您是否使用StringBuilder(或多线程用例上的StringBuffer)并仅在必要时进行日志记录(
If(logger.isDebugEnabled(){log.debug(…)}
),它们是降低性能的常见陷阱。

如果OP不愿意编写DTO并使用,我几乎不认为定制的Jackson序列化器和反序列化器是他的选择。如果OP不愿意编写DTO并使用,我几乎不认为定制的Jackson序列化器和反序列化器是他的选择。