как настроить дату в сериализации Джексона, @JsonSerialize не работает - PullRequest
2 голосов
/ 24 мая 2019

Я хочу изменить формат даты в json, который доставляется веб-службой java rest, потому что у json есть такие даты: 2019-05-23T06: 00: 00Z [UTC] , поэтому клиент путает [UTC] с массивом из-за '[' и ']'

im, использующего привязку данных glassfish 5, jax-rs, jackson 2.9.4.я пытался использовать @ JsonSerialize (используя = CustomXSerializer.class) в объекте модели и не работал, а также @ JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "MM-dd-yyyy ", timezone =" CET ") в свойстве Date в объекте модели, но снова не работает, всегда отображается [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:

        <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>

Есть ли способ изменить формат, если разделение Дата в одном месте для всех объектов модели?Я бы предпочел, чтобы вместо создания собственного сериализатора для каждого объекта модели, заранее спасибо

Ответы [ 2 ]

1 голос
/ 25 мая 2019

я обнаружил, в чем заключается моя проблема, мне нужно было зарегистрировать Джексона в качестве поставщика 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>
1 голос
/ 24 мая 2019

Обычно я использую @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;
    }
}
...