问题标签 [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.
spring-boot - 无法完成请求:java.io.IOException: Stream closed from Spring boot Controller method
我使用 jsonb 作为 Spring Boot 的首选 json 映射器。但是当通过 Rest 客户端(Soap UI)调用控制器时,我得到了一个 Stream closed 异常。如果我使用 Jackson 作为首选的 json 映射器,一切都会顺利进行。我正在使用 Spring WebMVC。没有 JAX-RS。我们正在尝试使用 Java 平台的标准 Json API。返回的对象是一个简单的 POJO,使用 lombok 注释 (@Data) 进行注释。jsonb 实现的其他用途在其他非 spring-mvc 方法中起作用。
代码/配置部分:
1) pom.xml
2)应用程序.yaml:
3)控制器方法:
例外:
我尝试切换服务器:Jetty/Tomcat。我还尝试了不同的实现:Apache Johnzon vs Eclipse Yasson。
json - 我需要与 Yasson 绑定 JSON 的 getter 吗?
我试图避免我的 POJO 上的 getter 和 setter,但 Jersey 正在使用我的 getter 方法将我的 POJO 转换为 JSON。
我尝试使用 Yasson,但是当我尝试删除我的吸气剂时,它只返回空白 JSON。
java - 使用 JSON-B 反序列化 JSON 数组
我正在尝试使用 JSONB 反序列化 JSON 数组。
JSON
控制器
动物清单
动物
但我收到以下错误:
java - 如何防止使用 eclipse Yasson 输出空字符串和空集合
我们想为一些 Java 对象创建一个 json 字符串,但我们不希望将空字符串或空数组添加到 json 输出中。我们正在使用 Eclipse Yasson 1.0.1 创建 json 字符串。
实际上我们想要的是JsonInclude.Include.NON_EMPTY
杰克逊的行为,但我们不能使用杰克逊。
当前输出为
但我们希望它成为
jersey - 是否可以全局设置 JSON-B (Yasson) 中的默认日期格式,而不是在每个属性上添加注释?
到目前为止,我一直在使用 Jersey,并且正在使用 JSON-B 进行我的第一个实现。
我正在使用 Payara,所以我与 Jersey 和 Yasson 合作。我遇到了一个问题,因为序列化的日期总是包含“[UTC]”后缀。
我设法在我的 DTO 中对我的日期属性使用了注释。但我想全局配置(在 JAX-RS 应用程序配置中?),而不是在每个日期属性上重复自己。那可能吗?到目前为止我还没有找到任何东西...
附带问题:我认为可以去掉这个“[UTC]”后缀,因为它会破坏所有试图解析日期的客户端。任何想法?
jax-rs - 从 JsonbSerializer 访问 JAX-RS 资源注释
我有一个使用自定义 GSON JSON 适配器在 Payara 4 上运行的应用程序。我想迁移到 Payara 5 (5.191) 并开始使用 JSON-B。在我们当前的应用程序中,我们可以使用资源上的注释来控制 JSON 输出。
例如使用@Summarize
:
这将导致在我们的 : 中使用不同的 GSON 配置@Provider
:
我想在新的 JSON-B 设置中做类似的事情。我用 注释了我们的实体@JsonbTypeSerializer(MySerializer.class)
,所以我希望能够从序列化程序中检测它应该做什么:要么创建一个完整的序列化 JSON 对象,要么创建一个摘要。
我希望做的是在 中设置一个属性JsonbConfig
,如下所示:
@Context
并使用(只是猜测这可能在这里工作)在序列化程序中读取它,如下所示:
..但事实并非如此。有什么方法可以从一个访问 JAX-RS 资源注释JsonbSerializer
?
java - JSON绑定@JsonbTypeDeserializer注释在枚举上被忽略了吗?
我正在将 JAXB 应用程序转换为JSON-B,并且在尝试使用我的一个测试中的自定义反序列化 Java 枚举时遇到了问题JsonbDeserializer
。
我需要反序列化的原始 JSON 包含int
引用枚举常量的 s。因此,我的自定义JsonbDeserializer
需要采用int
并返回匹配的枚举常量ordinal
。它看起来像这样:
然后我像这样运行它:
不幸的是,这是我回来的:
如您所见,RegionDeserializer
未使用。相反,使用默认的枚举反序列化器。查看 JSON-B 文档,我看到我应该手动注册反序列化器:
当我这样做时,代码实际上是有效的。但这是我的问题 - 我该怎么做才能JsonbTypeDeserializer
自动注册注释?考虑到我有很多需要自定义反序列化器的枚举,手动注册它们确实无法扩展。
编辑 1:我尝试改用@JsonbCreator
-annotated 静态方法,结果是一样的。仍然使用默认的枚举反序列化器。
java - Java Jsonb在ISO8601中反序列化UTC日期时间
我正在使用 JSON-B(yasson 实现)并且我正在接收具有这样一个字段的对象的数据
对于 UTC 日期时间值,这是完全标准的 ISO 8601。现在对应的 Java 类只声明了一个 Date 成员变量,没有其他特定的注解
一切似乎工作正常,看起来 JSON-B 实现正确理解为 UTC,而无需我使用@JsonbDateFormat注释指定格式。我想我很确定,因为我检查过
但是,当我运行另一个测试从日期时间值中删除“Z”时,它会产生正确的结果,我希望它会产生一个不同的结果,将日期时间值解释为本地而不是 UTC。令我大吃一惊的是,JSON-B 得到的 Date 对象是完全一样的。我在这里想念什么?为什么2020-03-19T06:42:42Z和2020-03-19T06:42:42是同一件事?(我不认为他们是)。或者,当没有指定时区时,JSON-B 实现是否总是将 UTC 视为默认值?
谢谢
java - 我如何确定 Java 类型是否可从 JSON 转换为 JSON
JSON-B 将类型转换LocalDate
为简单的字符串。当我有 aType
时,如何确定 JSON-B 是否会直接转换这种类型,即它是否是标量类型?
我没有实例,所以我什至不能尝试将其转换为字符串并查看它是否包含花括号。
或者我是否必须寻找具有valueOf
orparse
方法或构造函数的类型只有一个 String 参数?
java - (De) 在 Thorntails 上序列化 JSON 使用 JSON-B 而不是 Jackson
我有一个基于 Thorntail 和 Microprofile 的小型服务。看起来很简单——在 POST 请求中获取 JSON 做一些事情,返回响应。但是问题是,在 POJO 中,我有一个LocalDateTime
字段并且出现了问题,这是我得到的响应
为什么它使用 Jackson 而不是 Jsonb provider ?
在日志中,我收到以下消息(除其他外)
我在哪里设置这个resteasy.preferJacksonOverJsonB
属性?
我试图在 中设置属性project-defaults.yml
,我试图作为-D
参数提供,但似乎没有任何效果,我仍然收到此消息,并且(反)序列化仍然存在问题。
修复它的方法是什么?我查看了文档、示例甚至源代码,仍然想知道什么会起作用。
更新:
相关部分来自dependency:tree