Spring控制器返回不同的日期格式

时间:2017-04-26 15:29:15

标签: java json spring-mvc date-format

我有一个spring控制器在json中返回一个实体。该实体包含一个日期,我想根据实体中的一个字段返回EITHER 12小时格式或24小时格式。 Spring或jackson是否提供了这样的功能?

@RequestMapping(value = "/{systemName}",method = RequestMethod.GET)
public Entity getEntityByName(@PathVariable String name,HttpServletResponse response){
Entity entity = service.getEntity(name);
    if(entity ==null){
        response.setStatus(404);
    }
    return entity ;

}

2 个答案:

答案 0 :(得分:1)

杰克逊2及以上

@JsonFormat(shape = JsonFormat.Shape.STRING ,pattern = "dd-MM-YYYY hh:mm:ss" , timezone="UTC")
private Date from_date;

答案 1 :(得分:0)

简而言之,是的,这是可能的。话虽如此,我建议您返回日期的数字表示,并将其留给您的消费者,以便随时显示。这是实现你想要的东西的方法。

创建一个将用作实体对象的序列化程序的类。

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class EntitySerializer extends JsonSerializer<Entity> {
   @Override
   public void serialize(Entity entity, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {

       jsonGenerator.writeStartObject();
       jsonGenerator.writeStringField("name", entity.getName());

       if (entity.getFieldThatIndicates24HourFormat()) {
          jsonGenerator.writeStringField("date", entity.getDate().toString());
       } else {
          jsonGenerator.writeStringField("date", entity.getDate().toString());
       }

       jsonGenerator.writeEndObject();
   }
}

在您的实体上,添加一个注释,使该类可用于序列化。

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(using = EntitySerializer.class)
public class Entity {

这有明显的缺陷,因为您现在必须注意对实体的更改并相应地更新序列化程序。