当前位置: 首页 > 知识库问答 >
问题:

如何在jackson序列化中定制日期,@JsonSerialize不起作用

楮自珍
2023-03-14

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

我使用glassfish 5、jax-rs、jackson 2.9.4 databind。我尝试在模型对象中使用@JSONSerialize(使用=CustomXSerializer.class),但没有成功,在模型对象的Date属性中使用@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
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
    </dependencies>

共有1个答案

谢善
2023-03-14

我发现了我的问题所在,我需要将jackson注册为jersey的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>

并在pom上使用依赖项,如下所示:

         <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.x</version>
        </dependency>
 类似资料:
  • 无法从字符串“1979-12-05T08:00Z”反序列化java.util.Date类型的值:无效表示(错误:无法分析日期值“1979-12-05T08:00Z”:无法分析日期“1979-12-05T08:00.000Z”:虽然它似乎符合格式“yyyy-mm-dd't'hh:mm:ss.sss'z'',但分析失败 到目前为止,我试图包含这种依赖关系: 还有: 但没有奏效。

  • 问题内容: 我从ExtJS获取日期字符串,其格式为: “ 2011-04-08T09:00:00” 当我尝试反序列化此日期时,它将时区更改为“印度标准时间”(该时间增加+5:30)。这就是我反序列化日期的方式: 这样做也不会更改时区。我仍然在IST中得到日期: 如何以无时区麻烦的日期反序列化日期? 问题答案: 我找到了解决方法,但与此同时,我需要在整个项目中注释每个日期的设置器。有没有一种方法可以

  • 问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这

  • 问题内容: 杰克逊(Jackson)做的事情确实很奇怪,我找不到任何解释。我正在执行多态序列化,当对象独立时它可以完美地工作。但是,如果将同一个对象放入列表中并对其进行序列化,则会删除类型信息。 它丢失类型信息的事实将导致人们怀疑类型擦除。但这是在列表 内容 的序列化过程中发生的。Jackson要做的只是检查要序列化的当前对象以确定其类型。 我使用杰克逊2.5.1创建了一个示例: 这是输出: 如您

  • 我阅读了Jackson的annotations文档,但是我仍然找不到如何从annotations调用自定义序列化程序来序列化< code>java.sql.Date对象。 但是注释似乎只接受布尔值作为参数,而注释doc则表示: @JsonValue(method):用于标记返回值用作对象序列化的方法;通常用于标记生成字符串的方法(如toString())以生成JSON原语值序列化块引号 我是否使用

  • 但这只有在保证先设置start的情况下才起作用。