Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jackson序列化中自定义日期,@JsonSerialize不工作_Java_Jackson_Jersey_Jersey 2.0_Jackson Databind - Fatal编程技术网

Java 如何在jackson序列化中自定义日期,@JsonSerialize不工作

Java 如何在jackson序列化中自定义日期,@JsonSerialize不工作,java,jackson,jersey,jersey-2.0,jackson-databind,Java,Jackson,Jersey,Jersey 2.0,Jackson Databind,我想更改java rest Web服务交付的json中的日期格式,这是因为json的日期如下:2019-05-23T06:00:00Z[UTC],因此客户端将[UTC]与数组混淆,因为“[”和“]” 我使用glassfish 5、jax rs、jackson 2.9.4数据绑定, . 我曾尝试在模型对象中使用@JsonSerialize(using=CustomXSerializer.class),但没有成功,也尝试在模型对象的日期属性中使用@JsonFormat(shape=JsonFo

我想更改java rest Web服务交付的json中的日期格式,这是因为json的日期如下:2019-05-23T06:00:00Z[UTC],因此客户端将[UTC]与数组混淆,因为“[”和“]”

我使用glassfish 5、jax rs、jackson 2.9.4数据绑定, . 我曾尝试在模型对象中使用@JsonSerialize(using=CustomXSerializer.class),但没有成功,也尝试在模型对象的日期属性中使用@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“MM dd yyyy”,timezone=“CET”),但同样没有成功,它总是显示[UTC]

我的代码:

package api;
import model.people;
import java.util.Date;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/helloworld")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class HelloWorldRest {

  @GET
@Produces(MediaType.APPLICATION_JSON)
   public people sayHello() {

    people p=new people("pepe", "27",new Date());
    return p;

  }
}
模型对象:

public class people {
    private String nombre;
    private String edad;
       @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="MM-dd-yyyy",timezone="CET")
    public Date d;
    public people(String pNombre,String pEdad,Date pD)
    { nombre=pNombre;
        edad=pEdad;
        d=pD;
    }
.
.
//getters and setters
pom:


爪哇
javaeewebapi
7
假如
com.fasterxml.jackson.core
杰克逊数据绑定
2.9.8

如果所有模型对象的日期都在一个点上,有没有办法更改格式?我宁愿不为每个模型对象创建自定义序列化程序,而是提前感谢我通常使用
@Provider
来自定义日期

@Provider
public class AppObjectMapper implements ContextResolver<ObjectMapper> {

    private static final ObjectMapper MAPPER = new ObjectMapper();
    private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

    static {
        // .. other configuration for Jackson Object Mapper.
        MAPPER.setDateFormat(df);
    }

    public AppObjectMapper() {
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return MAPPER;
    }
}
@Provider
公共类AppObjectMapper实现ContextResolver{
私有静态最终ObjectMapper MAPPER=新ObjectMapper();
私有静态最终SimpleDataFormat df=新SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSSZ”);
静止的{
//…Jackson对象映射器的其他配置。
setDateFormat(df);
}
公共对象映射器(){
}
@凌驾
公共对象映射器getContext(类类型){
返回映射器;
}
}

我发现了我的问题所在,我需要在jersey注册jackson作为json提供者,这样就可以像这样在web.xml中注册

<init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
</init-param>

jersey.config.server.provider.classnames
org.glassfish.jersey.jackson.JacksonFeature
在pom中使用依赖项,如下所示:

         <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.x</version>
        </dependency>

org.glassfish.jersey.media
泽西媒体公司
2.x

我尝试过,但没有成功,仍然显示[UTC]格式,……对不起,我对jackson有些陌生,可能我遗漏了什么,AppObjectMapper类应该在哪里?在某个特定的包或文件夹中,是的,我试过了,但没有成功。我被这件事逼疯了,这件事对我很有效。我现在意识到Glassfish默认使用另一个提供者。谢谢
         <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.x</version>
        </dependency>