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

JAX-RS @Produces: how to customize JSON?

我是 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,那么我应该将该子类放在我的项目中的什么位置?

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

在新的 serializers 包下,我创建了 CustomJsonDateSerializer class,由于 [=15=,它将被委派负责格式化 date 属性] 注释。

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

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