【发布时间】:2015-10-15 06:05:12
【问题描述】:
我已经映射了一个自定义反序列化器,以将 dd/MM/yyyy 模式上的字符串转换为 LocalDate,这样我就可以使用更具可读性的签名来调用我的服务..
这是我的 dto 类,用作 Jersey @BeanParam 在层之间传输数据:
public class ProdutoFilterDto implements FilterDto {
private static final long serialVersionUID = -4998167328470565406L;
@QueryParam("dataInicial")
@JsonDeserialize(using = CustomLocalDateDeserializer.class)
private LocalDate dataInicial;
@QueryParam("dataInicial")
@JsonDeserialize(using = CustomLocalDateDeserializer.class)
private LocalDate dataFinal;
public LocalDate getDataInicial() {
return dataInicial;
}
public void setDataInicial(LocalDate dataInicial) {
this.dataInicial = dataInicial;
}
public LocalDate getDataFinal() {
return dataFinal;
}
public void setDataFinal(LocalDate dataFinal) {
this.dataFinal = dataFinal;
}
}
这是我的自定义反序列化器:
public class CustomLocalDateDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
final String data = p.getValueAsString();
return (LocalDate) formatter.parse(data);
}
}
它被用于这项运动衫服务:
@Path("produto")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProdutoService {
...
@GET
@Path("query")
@Override
public Response query(
@QueryParam("offset") @DefaultValue(value = "0") Integer offSet,
@QueryParam("limit") @DefaultValue(value = "10") Integer limit,
@BeanParam ProdutoFilterDto filter) { ... }
...
}
我是这样打电话的:
${host goes here}/produto/query?dataInicial=11/09/1992
问题是反序列化器方法从未被调用,并且bean参数变量保持为空..
【问题讨论】:
-
你配置你的 web.xml 了吗?意思是你定义了 servlet Jersey 并映射了它?
标签: java json jackson jax-rs jersey-2.0