我是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();
    }
}


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

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

最佳答案

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

在一个新的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);
    }
}

08-27 09:32