gpt4 book ai didi

java - 无法在 XPage ServiceBean 中获取多部分/表单数据 POST 请求正文的句柄

转载 作者:行者123 更新时间:2023-12-04 09:08:50 24 4
gpt4 key购买 nike

我有一个基于引导框架的 xpage,它使用 jQuery $post 提交页面中包含的表单。这些是使用 multipart/form-data content-type 发布的,所以我无法控制。我已经设置了一个包含调用 java ServiceBean 的 RESTService 的 REST.xsp。我尝试过的最新方法如​​下:

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

}
但我似乎无法让服务器获取已发布的表单数据。我可以在控制台上看到“test”,但它没有点击“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 请求一起发送到 ExtLib Rest 控件的 multipart/formdata,您可以获得提交数据的句柄,如下所示:

for (Object e : req.getParameterMap().entrySet()) {

Map.Entry entry = (Map.Entry) e;
System.out.println("got " + entry.getKey() + "/" + entry.getValue().getClass().getCanonicalName());

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

关于java - 无法在 XPage ServiceBean 中获取多部分/表单数据 POST 请求正文的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63396823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com