2017-04-26 70 views
1

我有一個彈簧控制器在json中返回一個實體。該實體包含一個日期,我希望根據實體中的一個字段返回12小時或24小時格式。春天還是傑克遜提供這種功能?彈簧控制器返回不同的日期格式

@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

如何代碼示例有關你的問題? –

回答

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 { 

由於您現在必須注意對您的實體所做的更改並相應更新序列化程序,因此存在明顯的缺陷。

+0

謝謝!這真的很有幫助! –

1

在傑克遜2及以上

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

這隻會將日期格式更改爲dd-MM-YYYY hh:mm:ss,而我需要將其配置爲不同的模式。 –

+0

請參閱http://stackoverflow.com/questions/18734452/display-current-time-in-12-hour-format-with-am-pm。你需要改變模式。 – Vaibs