我有一个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 ;
}
答案 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 {
这有明显的缺陷,因为您现在必须注意对实体的更改并相应地更新序列化程序。