是否可以在JSON-B(Yasson)中全局设置默认日期格式,而不是在每个属性上都添加注释?

问题描述 投票:0回答:1

到目前为止,我已经使用Jersey,并且正在使用JSON-B进行第一个实现。

我正在使用Payara,所以我与Jersey和Yasson一起工作。我遇到了一个问题,因为序列化的日期将始终包含“ [UTC]”后缀。

我设法在DTO的date属性中使用注释。但是我想全局配置(在JAX-RS应用程序配置中?),而不是在每个date属性上重复我自己。那可能吗?到目前为止我还没有发现任何东西...

侧面问题:我认为有可能摆脱这个“ [UTC]”后缀,因为它会使尝试解析日期的所有客户端中断。有什么主意吗?

jersey jax-rs payara jsonb-api yasson
1个回答
0
投票

由于此Github issue,我得以解决我的问题。这就是我最终在代码中写的内容:

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) {
      ...
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.