JSON-B REST有效负载验证

voc*_*uoi 5 java validation rest jsonb-api

我已经使用JSON-B开发了Java REST服务,以将传入的有效负载映射到POJO。

现在,我想做的是验证传入的有效负载,可能是针对JSON模式,但是到目前为止,我还无法找到任何东西……

是否可以覆盖默认的JSON-B映射过程,从而捕获任何映射异常并自行处理?

And*_*ert 1

为了实现这一点,您可以注册自己的 JAX-RS 提供程序来执行 JSON(反)序列化并处理其中的任何错误。

例如:

@Consumes({ "*/*" })
@Provider
public class JsonBProvider implements MessageBodyReader<Object> {

    private static final Jsonb jsonb = JsonbBuilder.create();

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

    @Override
    public Object readFrom(Class<Object> clazz, Type genericType, Annotation[] annotations,
                           MediaType mediaType, MultivaluedMap<String, String> httpHeaders, 
                           InputStream entityStream) 
                  throws IOException, WebApplicationException {
        try {
            return this.jsonb.fromJson(entityStream, clazz);
        } catch (Exception e) {
            // Do your custom handling here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将覆盖通过 JAX-RS 和 JSON-B 发生的反序列化。

注意:如果您也想对序列化执行相同的操作,则可以MessageBodyWriter<Object>以类似的方式实现。