有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将我注册的提供者与动态创建的jersey资源类一起使用?

我只想知道我们如何将注册的提供者(MessageBodyReader和MessageBodyWriter)与动态创建的jersey资源类一起使用,即通过编程jersey资源api(如

 Resource.Builder resourceBuilder = Resource.builder();
        resourceBuilder.path("helloworld/{name}");

        ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("POST");
        methodBuilder.produces(MediaType.TEXT_PLAIN_TYPE).consumes(MediaType.TEXT_PLAIN_TYPE)
                .handledBy(new MyInflector());
         Resource resource = resourceBuilder.build();
        registerResources(resource);

现在,如何在MyInflector类中使用我注册的MessageBodyReader和Writer,如下所示

public class MyInflector implements Inflector<ContainerRequestContext, String>{

    @Override
    public String apply(ContainerRequestContext arg0) {
        System.out.println("Processing request");
         MultivaluedMap<String, String> pParams =arg0.getUriInfo().getPathParameters();
         InputStream stream=arg0.getEntityStream();
         if (stream != null) {
                Writer writer = new StringWriter();

                char[] buffer = new char[5120];
                try {
                    Reader reader = new BufferedReader(
                            new InputStreamReader(stream, "UTF-8"));
                    int n;
                    while ((n = reader.read(buffer)) != -1) {
                        writer.write(buffer, 0, n);
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    try {
                        stream.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                return writer.toString();
            } else {
                return "";
            }
    }

}

共 (1) 个答案

  1. # 1 楼答案

    您可以做的是将ContainerRequestContext强制转换为ContainerRequest(这是ContainerRequestContext接口的Jersey实现。使用该类,您可以调用containerRequest.readEntity(Pojo.class)。这将导致调用Pojo.class类的读取器(假设内容类型也与端点使用的媒体类型匹配)

    @Override
    public String apply(ContainerRequestContext requestContext) {
        ContainerRequest containerRequest = (ContainerRequest)requestContext;
        Model model = containerRequest.readEntity(Model.class);
        ...
    }