当前位置: 首页 > 知识库问答 >
问题:

如何让webfluxendpoint用每个项的对象名序列化json

单于飞鸣
2023-03-14

我有一个webfluxendpoint,它返回一个项目数组。我试图让它将对象名添加到由@JsonRootName指定的数组中的每个项中。我曾经尝试过使用Jackson2ObjectMaper这样配置对象映射器。我正在使用SpringBoot 2.4.4。

@Configuration
@EnableWebFlux
public class JacksonConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> {
            builder.modules(new JavaTimeModule());
            builder.featuresToEnable(SerializationFeature.WRAP_ROOT_VALUE);
            builder.featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            builder.indentOutput(true);
        };
    }
}

我的endpoint如下所示:

@GetMapping(value = "/all/{id}", produces = "application/json")
public ResponseEntity<Flux<EventsMetaData>> getAllEventsByUser(@PathVariable String id) {
    return ResponseEntity.ok(eventsMetaDataService.getAllEventsByUserId(id));
}

Json的回应是:

[
    {
        "id": "342424234",
        "userid": "34324242",
        "eventId": null,
        "eventName": "Test 1",
        "eventDetails": null
    },
    {
        "id": "43435235",
        "userid": "34244242",
        "eventId": null,
        "eventName": "Test",
        "eventDetails": null
    }
]

预期输出:

[
   Event: {
        "id": "342424234",
        "userid": "34324242",
        "eventId": null,
        "eventName": "Test 1",
        "eventDetails": null
    },
    Event: {
        "id": "43435235",
        "userid": "34244242",
        "eventId": null,
        "eventName": "Test",
        "eventDetails": null
    }
]

然而,当我的对象被@JsonRootName注释时,我没有得到根对象

@JsonRootName(value = "Event")
public class Event {

欢迎提出任何建议。

编辑:在从配置中删除@EnableWebFlux之后,它给了我一个根包装值,但仍然不是它应该使用的列表:

{
    "List": [
        {
            "id": "610bd71077cfcd2ee941217c",
            "eventName": "Test",
            "eventDetails": null,
            "eventDateTime": null,
            "eventLink": null
        }
    ]
}

但是,单个对象像这样尊重包装器:

{
    "event": {
        "id": "610bd71077cfcd2ee941217c",
        "eventName": "Test",
        "eventDetails": null,
        "eventDateTime": null,
        "eventLink": null
    }
}

链接到replicar项目https://gitlab.com/dmbeer/so-68651608即使json结构错误,测试列表也不应该存在。

共有1个答案

卢志行
2023-03-14

我认为您需要这样配置Bean。

@Configuration
public class ApplicaitonConfiguration {

    @Bean
    ObjectMapper objectMapper() {

        var mapper = JsonMapper.builder().addModules(new JavaTimeModule()).build();

        // Enable your features...

        return mapper;
    }
}
 类似资料:
  • null 但是,当我以Yar-Client模式提交Spark应用程序时,抛出了以下异常: 线程“main”org.apache.spark.sparkException:Task not serializable at org.apache.spark.util.closureCleaner$.ensureRecleaner.ccala:166)at org.apache.spark.util.c

  • 我有以下业务对象 我有以下用于 json 序列化的接口和实现 这是我的客户代码 这里我不喜欢的是,员工知道它将使用特定的库进行序列化(因为JsonProperty属性)。因此,如果我决定使用另一个json序列化程序或编写自己的,我将需要遍历所有业务对象并修改它们。有可能使我的业务对象序列化变得无知吗?如果是,如何 XML序列化和XmlSerializer类也是一样的:我需要用一些属性标记业务对象中

  • 问题内容: 我问了一个先前的问题,关于如何将多个保存文件保存到.ser文件中,建议我使用哈希集,因为它们是可序列化的。我试图编写一段测试代码来序列化哈希集内的每条信息: 但是我在获取代码来编写带有index(i)的对象时遇到了麻烦,因为它说未为type定义该方法。有没有一种方法可以遍历哈希集中的每条信息,还是应该一次序列化整个集合。另一个问题是,如果第一个答案是后者,我将如何将数据反序列化为单独的

  • 问题内容: 我有一个问题。我想使用JAXB将一个对象转换为另一个对象。就像在中,我有一个class 和另一个class ,它们都有相同的参数,实际上都是相同的(复制粘贴),但是包不同。我想使用进行它们之间的转换。 怎么做,请帮帮我。 问题答案: 您可以执行以下操作。 注意: 不需要利用JAXBSource将数据具体化为XML。 它在对象模型上不需要任何注释。 com.home.Student co

  • 嗨,我有LogEventObject在客户端用于记录事件,我想使用REST API将其发送到服务器。我将LogEventObject转换为json字符串,并通过REST将其作为有效载荷发送。在服务器端,我使用Groovy,当我尝试做对象apper.read值()时,我得到以下错误。 com.fasterxml.jackson.databind.JsonMappingExc0019:找不到非具体的集