通过Groovy解析多部分混合数据格式

问题描述 投票:0回答:1

我想在Groovy中解析多部分混合数据格式, 我们可以使用哪个类来解析多部分混合数据? 当我解析输入时,我需要读取整个 JSON 有效负载,或者我可以使用单个字段解析 JSON 格式

Groovy 是否提供任何可以解析 Multipart mix 的类,请建议一些示例。

此响应是从 SAP ODATA 调用收到的,其中 BTP CI 应处理此响应并读取错误和 HTTP 代码

多部分混合示例

        --789901289D3B067293B4A5D8BC2033B80
        Content-Type: application/http
        Content-Length: 1279
        content-transfer-encoding: binary
        
        HTTP/1.1 404 Not Found
        Content-Type: application/json;odata.metadata=minimal;charset=utf-8
        Content-Length: 1097
        
        {
        "error": {
            "code": "/SCWM/ODATA_API/126",
            "message": "task item 1 doesn't exist in warehouse1.",
            "target": "$Parameter/_it",
            "@SAP__core.ContentID": "1",
            "details": {
                "message": "task 1 doesn't exist in warehouse."
            }
        }
    }

--789901289D3B067293B4A5D8BC2033B80--
groovy
1个回答
0
投票

Groovy 不直接提供任何东西。 然而,Java 确实如此,而且当 Java 可用时,重用 Java 是很容易的。 这里的问题是,这通常是在服务器接收文件上传的服务器中处理的。 在 Servlet 3.0+ 中,它已经是内置的,您可以直接使用它。 否则你可以使用 apache commons-fileupload。 在 Spring 中,它是 MultipartFile。 但所有这些解决方案都是从接收客户端发送的请求开始的。

如果您收到此多部分消息作为响应,则这些库可能无法工作。 从理论上讲,它们可能会有所帮助,但需要进行大量研究才能弄清楚。 因此,这很大程度上取决于您如何从 SAP 收到此回复,而您并没有真正提供任何具体细节。您使用什么客户端来执行 http 调用? 您收到的是回拨请求吗?

这里是一个使用 Apache

commons-fileupload
库作为示例的示例:

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if (ServletFileUpload.isMultipartContent(request)) {
            ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
            try {
                List<FileItem> items = upload.parseRequest(request);
                for (FileItem item : items) {
                    if (item.isFormField()) {
                        // Process form field
                        String fieldName = item.getFieldName();
                        String fieldValue = item.getString();
                        // ...
                    } else {
                        // Process uploaded file
                        String fieldName = item.getFieldName();
                        String fileName = item.getName();
                        byte[] fileData = item.get();
                        // ...
                    }
                }
            } catch (FileUploadException e) {
                // Handle upload exception
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.