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