Java 获取上下文HttpServletRequest的正文内容

Java 获取上下文HttpServletRequest的正文内容,java,rest,jersey,Java,Rest,Jersey,我正在使用Jersey,我正在尝试使用与此问题非常类似的方法访问请求主体: 如何使用Jersey读取RESTful服务的请求正文? 我和邮递员一起寄出了我的身价 @Path("/updateanfrage") public class UpdateAnfrage extends ResourceConfig { private static final Logger log = Logger.getLogger(UpdateAnfrage.

我正在使用Jersey,我正在尝试使用与此问题非常类似的方法访问请求主体:

如何使用Jersey读取RESTful服务的请求正文?

我和邮递员一起寄出了我的身价

   @Path("/updateanfrage")
       public class UpdateAnfrage extends ResourceConfig
        {
          private static final Logger log = Logger.getLogger(UpdateAnfrage.class);

        @POST
        @Consumes(MediaType.APPLICATION_XML)
        @Produces(MediaType.APPLICATION_XML)
        public UpdateInformation beschaffeUpdateInformation(ClientInformation clientinformation,
                @Context HttpHeaders headers, @Context UriInfo uriDetails,  @Context Request request, @Context HttpServletRequest requestContext) throws SecurityException, IOException
        {
             UpdateInformation updateinformation = new UpdateInformation();
             log.info("Method -- " + request.getMethod());
             log.info("Complete URI -- "+ uriDetails.getRequestUri().toString());
             log.info("Content Type -- "+ requestContext.getContentType());
            // log.info("Body -- "+ requestContext.getReader().lines());
             ...
             ...
            return updateinformation;
        }

一种方法是创建一个过滤器(实现
ContainerRequestFilter
)并处理输入流

@Provider
@PreMatching
public class LoggingFilter implements ContainerRequestFilter{

  @Override
  public void filter(ContainerRequestContext req){

  //init logger
  final Logger logger = Logger.getLogger(UpdateAnfrage.class);

  BufferedReader br = new BufferedReader(new InputStreamReader(req.getEntityStream(),"UTF-8"));

  StringBuilder xml = new StringBuilder();
  String line;
  while ((line = br.readLine()) != null) {
            xml.append(line);
        }

   req.setEntityStream(new ByteArrayInputStream(xml.toString().getBytes("UTF-8")));
   logger.info(xml);

  }

}

创建一个ClientInformation POJO并使用JAXB对其进行注释。然后,您可以直接访问BeschafeUpdateInformation方法中的clientInformation。此方法还应返回UpdateInformation的实例。我想读取XML(字符串)并将其写入文件log.txt客户端信息是什么样子的?导入javax.XML.bind.annotation.XmlRootElement;导入javax.xml.bind.annotation.XmlType@XmlRootElement(name=“ClientInformation”)@XmlType(proporter={“firma”,“version”,“personaliserung”})公共类ClientInformation{public firma firma;public version version;public personaliserung personaliserung;//默认构造函数public ClientInformation(){firma=new firma();version=new version();personaliserung=new personaliserung();}}}用这些信息更新您的问题,很难将其理解为评论。您还可以分别添加Firma和Version的定义。