JAX-RS @Produces:如何自定义JSON?

时间:2015-10-15 20:26:27

标签: java json rest jax-rs

我是JAX-RS的新手,我想将我的项目列表作为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();
    }
}

但是,日期未格式化,但显示为 long

This答案显示了如何使用JsonSerializer格式化日期。如果我扩展JsonSerializer,那么我将该子类放在项目中的哪个位置?

1 个答案:

答案 0 :(得分:0)

我自己想出了一个解决方案:

在新的serializers软件包下,我创建了CustomJsonDateSerializer类,由于date注释,我们将负责格式化@JsonSerialize(...)属性。

所以我修改了我的Entity类,在该字段的顶部添加了注释:

@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);
    }
}