Jersey Server側のJSON読み込み時に不明フィールドを無視させる

Jersey Client APIの使い方、その1にて、Jerseyのクライアント側にて不明フィールドを無視させる方法を書いた。つまり、サーバから送られたJSON中にクライアント側で認識していないフィールドがある場合にそれを無視する。

今度は逆に、クライアント側から送られたフィールドの中にサーバ側で認識していないフィールドがある場合にそれを無視する方法である。

これはウェブリソースのあるパッケージ内に以下を入れればよい。

@Providerをつけておくと、勝手に認識してくれるようで、入れておくだけでよい。

package some_package;

import java.io.*;
import java.lang.annotation.*;
import java.lang.reflect.*;

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.ws.rs.ext.*;

import com.fasterxml.jackson.databind.*;

@Provider
@Consumes("application/json")
public class MyReader implements MessageBodyReader<Object> {

  ObjectMapper mapper = new ObjectMapper()  
      .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

  @Override
  public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
    return true;
  }

  @Override
  public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType,
      MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
      throws IOException, WebApplicationException {
    return mapper.readValue(entityStream,  type);
  }
}