2015-10-15 17 views
1

我是JAX-RS的新手,我想將我的項目列表作爲JSON提供。我的實體模型是這樣的:JAX-RS @Produces:如何自定義JSON?

public class Entity { 
    private String name; 
    private Date date; 
    private Float number; 
} 

這是怎麼了調用服務:

@Path("/entities") 
public class EntitiesController { 
    @GET 
    @Produces({"application/json"}) 
    public List<Entity> getEntities() { 
     return EntityDAO.entitiesList(); 
    } 
} 

然而,迄今爲止未格式化,但顯示爲

This答案顯示瞭如何使用JsonSerializer格式化日期。如果我擴展JsonSerializer,那麼我在哪裏將該子類放在我的項目中?

+0

爲什麼你認爲它正在發生,因爲屬性沒有定義的? Jaxrs [應](http://stackoverflow.com/a/13979349/446554)只是使用'null'將其序列化爲json。 –

+0

此外,日期格式請將其分成它自己的問題。 (你也許會發現[this](http://stackoverflow.com/a/11233594/446554)很有幫助。) –

+0

@CoryKlein我發現'number'的getter是返回一個'float'而不是'Float'這就是導致錯誤的原因。無論如何,正如標題所示,我更關心JSON的定製。 – dabadaba

回答

0

我想出一個解決方案自己:

根據新serializers包我創建了CustomJsonDateSerializer類,將被委派date屬性感謝格式到@JsonSerialize(...)註釋的責任。

所以我修改了Entity類並稱註釋ontop的領域:

@JsonSerialize(using = CustomJsonDateSerializer.class) 
private Date date; 

這是CustomJsonDateSerializer內容:

package serializers; 

import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

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

public class CustomJsonDateSerializer extends JsonSerializer<Date> { 
    @Override 
    public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonGenerationException { 
     SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyy"); 
     String format = formatter.format(value); 
     jgen.writeString(format); 
    } 
}