问题标签 [jsonb-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Json-Binding API fromJson 方法返回 List
我正在尝试使用JSON-B API从文件中反序列化 json
这是代码
它按预期工作。
我试图概括这种方法而不是硬编码User
,但它似乎不起作用
尝试调用上述方法
但是,它扔了Exception in thread "main" java.lang.ClassCastException: java.util.HashMap incompatible with User
所以,看起来它是一个List<HashMap>
尽管List<User>
jakarta-ee - 无法识别的字段...未标记为可忽略,EE8 / Jakarta EE
我将 Wildfly 18 与 Resteasy 一起使用。
通过在我的 JSON API 的主体上传递一个未知属性,我得到了这个:
无法识别的字段“foo”(xxx 类),未标记为可忽略
我知道这是杰克逊提供者的问题,在过去我用这个提供者解决的项目中:
现在我已经转移到 EE8 / JakartaEE 上,其中包含框架上的 JsonB 指令,因此我正在使用JsonbConfig。这是我的提供者:
有没有办法像上面的映射器一样使用JsonbConfig设置忽略未知属性?
java - 使用 JSON-B / Yasson 将 JSON 反序列化为多态 POJO
我在资源类中有一个 PATCH 端点,其中一个抽象类作为请求主体。我收到以下错误:
似乎因为我声明为参数的身体模型是抽象的,所以它无法反序列化。
我期待得到 Element_A 或 Element_B
我怎样才能声明身体是多态的?
这是元素层次结构
这是我的端点的资源类
这是我在 PATCH 请求中发送的请求正文
我还尝试使用不起作用的自定义反序列化器添加 @JsonbTypeDeserializer
这是我发送的新请求:
引发此错误:
我的 pom.xml 包括:
java - Quarkus REST 客户端避免空字段的 JSON 序列化
我需要在远程服务上发送更新请求以更新某些字段。远程服务使用application/json
内容类型,所以我实现了我的休息客户端,如:
我只需要更新字段的一个子集。也许field1
和field3
。所以在这种情况下field2
将被设置为null
。
远程服务不接受 anull
作为参数值,因此我需要避免序列化所有具有null
值的字段。
我的项目使用jsonb
并且我已经尝试注释模型类JsonbNillable
但没有任何成功。
是否有办法配置其余客户端以避免空字段的序列化?
java - Spring Boot 不使用 @JsonbTypeAdapter
我正在尝试将 Json-B 与 Spring Boot 版本一起使用:2.3.1
json-b
休息控制器:
请求:
Json-B 适配器:
我也试过这个适配器:
我使用 Postman 发送了一个包含如下内容的发布请求:
我在适配器中放置了断点,但应用程序从未通过断点。我在休息控制器的异常处理程序中的拒绝值处放置了一个断点,我看到持续时间始终以“秒”为单位,而不是毫秒。如果请求具有“expiredTime”:6000,那么 Java 对象将具有值为 Duration=6000 秒的 expriredTime 字段(使用调试器查看值)并且将引发异常(这就是我可以在异常处理程序中使用调试器的原因)。
如何让 Spring Boot 使用我的 Json-B 适配器? 谢谢!
更新:我也在 application.properties 中指定了这个:
spring.http.converters.preferred-json-mapper=jsonb
java - 如何区分从json解析为null的故意null和不存在的字段?
我正在开发一个 CRUD Web 应用程序,它公开一个 REST 端点以更新 MongoDB 集合中的现有文档。
前端发送的 json 对象只包含需要更改的字段。
由于 json 解析器会将 json 对象中不存在的所有字段初始化为 null,我怎么知道一个字段是 null 是因为用户想要删除该值,还是因为它不需要更新?
答案可能是没有办法知道,但我的问题是:人们通常如何处理这种情况?
每次发送完整的对象并在数据库中完全替换它对我来说不是一个选择,原因有几个(良好的实践、性能以及前端的工作方式)。
我想到了一个可行的解决方案,但我对此并不满意:
- 为每个非必填字段添加一个额外的布尔标志(对于必填字段,我知道我无法删除该值)
- 拦截 MessageBodyReader 中的 json 并自己解析 json
- 如果 json 中存在带有 null 的字段,则将额外标志设置为 true 以将其标记为“删除”
这是迄今为止我能想到的“最干净”的解决方案,但它需要做很多额外的工作,我希望我能找到另一种方法。
提前感谢您的任何建议。
java - 使用 Quarkus + JSONB 是否有相当于 Jackson + Spring 的`@JsonView`?
我正在玩 Quarkus 并尝试构建一个 CRUD REST 应用程序;我试图让 2 个端点返回相同实体的 2 个不同视图。这是一个关于我在 Spring + Jackson 中如何做的例子:
这是重要的部分:现在,如果我使用 Jackson,我将创建一个CarView
类:
有了这个,我会Car.model
用@JsonView(CarView.Public.class)
和Car.owner
用注释@JsonView(CarView.Private.class)
,然后用相同的注释注释我在 REST 控制器中的方法,以便告诉杰克逊我想使用哪个视图:
我可以使用 Quarkus 和 JSON-B 完成相同的结果吗?
java - 如何使用 JSON-B 反序列化未知属性?
我正在尝试使用 Quarkus 的 JSON-B 实现反序列化以下 JSON(请参阅 API 文档)。
这里让我烦恼的是为多个 JSON 对象动态生成的数字键。我想将所有未知属性反序列化为Map<Long, MyObject>
. 简单地在数据对象中声明一个 Map 是行不通的。
Jackson 似乎完全支持使用@JsonAnySetter
注释的所需行为(请参阅文档)。
我能做的就是自己编写JsonbAdapter
来手动解析未知属性,但对于这样一个简单的任务来说,这似乎是一项荒谬的工作。
如何使用 JSON-B 将未知的 JSON 属性反序列化为 Map?
jsonb-api - 是否有等效于 JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY 的 Yasson/Json-b
我正在将一个库从 Jackson 转换为 json-b,但我找不到 JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY 的等效项。这样的事情存在吗?
我得到了以下工作,但我讨厌使用 Yasson 内部来这样做。
java - 从杰克逊迁移到 JSON-B
当我们从Payara 4迁移到Payara 5时,它默认使用JSON-B(由Yasson实现),我们正在尝试将 JSON-B 配置为与我们在 Payara 4 中使用的Jackson具有相同的行为。
对于 Jackson,我们使用以下配置:
如何使用 JSON-B 实现相同的行为?