2015-10-15 16 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); 
    } 
}