无法在XPage ServiceBean

问题描述

我有一个基于引导框架的xpage,该框架使用jQuery $ post提交页面中包含的表单。这些内容使用multipart / form-data content-type发布,所以我对此无能为力。我已经建立了一个包含RESTService的REST.xsp,它调用了Java ServiceBean。我尝试过的最新方法如​​下:

private void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
    // TODO Auto-generated method stub
    
    try{
        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iterator = upload.getItemIterator(request);
        System.out.println("test");
        while (iterator.hasNext()) {
             System.out.println("test2");
            FileItemStream item = iterator.next();
            InputStream stream = item.openStream();

            if (item.isFormField()) {
                byte[] str = new byte[stream.available()];
                stream.read(str);
                String pFieldValue = new String(str,"UTF8");
                
                
                System.out.println("text Value : "+pFieldValue);
                

                if(item.getFieldName().equals("textBoxFormElement")){
                    System.out.println("text Value : "+pFieldValue);
                }
              }
            }
    }catch (Exception e) {
        e.printStackTrace();
    }
    
}

但是我似乎无法让服务器接收POSTed表单数据。我可以在控制台上看到“测试”,但没有点击“ test2”。

我尝试了所有可以找到的建议,包括:

    try {
         
            InputStream inputStream = request.getInputStream(); 
            Reader inputStreamReader = new InputStreamReader(inputStream);
            String allChars = "";
            System.out.println("test");
            int data = inputStreamReader.read();
            while(data != -1){
                System.out.println("test2");
                char theChar = (char) data;
                System.out.println(theChar);
                allChars = allChars + theChar;
                data = inputStreamReader.read();
            }

            inputStreamReader.close();
            
            
              
          }
         catch (IOException e) {
          System.out.println("No body data readable: " + e.getMessage() );
        }

(仍然没有“ test2”)...并且:

    String requestBody = extractPostRequestBody(request);
    System.out.println(requestBody);


  private static String extractPostRequestBody(HttpServletRequest request) {
    Scanner s = null;

    try {
        s = new Scanner(request.getInputStream(),"UTF-8").useDelimiter("\\A");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return s.hasNext() ? s.next() : "";
}

(没有打印到控制台)。

我也尝试过使用REST客户端将一些多部分表单数据值发布到URL,但是同样没有返回任何内容。但是,如果我尝试使用application / json content-type发布一些json并使用上面显示的最后一种方法,我会看到json被打印到控制台。

使用extLib REST控件和带有多部分POST的java servicebean可能存在一些问题吗?我知道您只能读取一次请求流,以便先前使用的例如request.properties将使此后的流为空,但这不是这种情况,并且假定json也不会显示。

非常感谢

解决方法

如果随POST请求一起发送的是multipart / formdata,则可以获取提交数据的句柄,如下所示:

for (Object e : req.getParameterMap().entrySet()) {
                
    Map.Entry entry = (Map.Entry) e;                
    System.out.println("got " + entry.getKey() + "/" + entry.getValue().getClass().getCanonicalName());
                
}

地图中的条目可以是表单字段,也可以是上传的文件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...