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