3

カスタム デシリアライザー アノテーションを持つクラスがあります。

@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: 
   } ]
 }
}

ありがとう!

4

1 に答える 1

1

@JsonDeserializeは Endpoints 内ではサポートされていませんが、@ApiTransformer代わりに を使用できます。

クラスを変換用にマークする:

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]));
  }
}
于 2013-10-17T18:02:41.510 に答える