jersey - 是否可以全局设置 JSON-B (Yasson) 中的默认日期格式,而不是在每个属性上添加注释?
问题描述
到目前为止,我一直在使用 Jersey,并且正在使用 JSON-B 进行我的第一个实现。
我正在使用 Payara,所以我与 Jersey 和 Yasson 合作。我遇到了一个问题,因为序列化的日期总是包含“[UTC]”后缀。
我设法在我的 DTO 中对我的日期属性使用了注释。但我想全局配置(在 JAX-RS 应用程序配置中?),而不是在每个日期属性上重复自己。那可能吗?到目前为止我还没有找到任何东西...
附带问题:我认为可以去掉这个“[UTC]”后缀,因为它会破坏所有试图解析日期的客户端。任何想法?
解决方案
感谢这个Github 问题,我能够解决我的问题。这是我最终在代码中编写的内容:
JSONConfigurator.java:
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;
import javax.json.bind.config.PropertyNamingStrategy;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
@Provider
public class JSONConfigurator implements ContextResolver<Jsonb> {
@Override
public Jsonb getContext(Class<?> type) {
JsonbConfig config = getJsonbConfig();
return JsonbBuilder
.newBuilder()
.withConfig(config)
.build();
}
private JsonbConfig getJsonbConfig() {
return new JsonbConfig()
.withDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", null);
}
}
和:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
@ApplicationPath("/api")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<Class<?>>();
addRestResourceClasses(resources);
resources.add(JSONConfigurator.class);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
...
}
}
推荐阅读
- c# - 将 shamsi 日期转换为 miladi 日期
- java - 根据用户输入动态显示/隐藏 BalloonTip
- r - 除了 apply 或 foreach 之外,还有其他方法可以并行执行函数吗?
- pandas - 从键值对生成 DataFrame
- c# - 通过 sftp 上传时“消息类型 93 在当前上下文中无效”:如何处理/继续?
- flutter - 如何在使用 map() 时使用 listTile 在 Flutter 中制作分隔符?
- c++ - 尝试将值存储到映射中的 std::variant 时出现 std::bad_variant_access 错误
- python - 如何在 Python 中输入签名函数(T,Sequence[T])-> int 包括 str?
- css - 无法在 WordPress 的表单中看到选择字段上的下拉箭头
- go - 编译器问题让 Go 结构实现接口