Java 如何在端点类上实现自定义@JsonDeserialize方法?
我有一个类,其中有一个自定义反序列化器注释:Java 如何在端点类上实现自定义@JsonDeserialize方法?,java,google-app-engine,jquery,google-cloud-endpoints,Java,Google App Engine,Jquery,Google Cloud Endpoints,我有一个类,其中有一个自定义反序列化器注释: @JsonDeserialize(using = ConvertToNullDeserializer.class) public void setObject(Integer pObj) { this.pObj = pObj; } 当此对象通过ajax发送到云端点时,我希望启动自定义反序列化程序,但我只得到: { "error" : { "message" : "com.google.appengine.repackaged.org.c
@JsonDeserialize(using = ConvertToNullDeserializer.class)
public void setObject(Integer pObj) {
this.pObj = pObj;
}
当此对象通过ajax发送到云端点时,我希望启动自定义反序列化程序,但我只得到:
{
"error" : {
"message" : "com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.lang.Integer from String value 'null': not a valid Integer value\n at [Source: N/A; line: -1, column: -1] (through reference chain:
"code" : 400,
"errors" : [ {
"domain" : "global",
"reason" : "badRequest",
"message" : "com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.lang.Integer from String value 'null': not a valid Integer value\n at [Source: N/A; line: -1, column: -1] (through reference chain:
} ]
}
}
谢谢
@JsonDeserialize
在端点中不受支持,但您可以使用
标记要转换的类:
import com.google.api.server.spi.config.ApiTransformer;
@ApiTransformer(BarTransformer.class)
public class Bar {
private final int x;
private final int y;
public Bar(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
变压器示例:
import com.google.api.server.spi.config.Transformer;
public class BarTransformer implements Transformer<Bar, String> {
public String transformTo(Bar in) {
return in.getX() + "," + in.getY();
}
public Bar transformFrom(String in) {
String[] xy = in.split(",");
return new Bar(Integer.parseInt(xy[0]), Integer.parseInt(xy[1]));
}
}
import com.google.api.server.spi.config.Transformer;
公共级变压器{
公共字符串转换为(条形输入){
在.getX()中返回“+”,在.getY()中返回“+”;
}
公共栏转换源(字符串输入){
字符串[]xy=in.split(“,”);
返回新条(Integer.parseInt(xy[0]),Integer.parseInt(xy[1]);
}
}
我不确定我是否完全理解您的问题,云端点通常会为您处理序列化和反序列化。也许@JsonDeserialize注释不是您想要采用的路径,因为通过端点,您可以将与json相关的内容委托给系统。反序列化程序的作用是什么?这适用于大多数情况,但在动态json请求破坏模型(即,可以是字符串或对象的字段)时失败