我想在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 不直接提供任何东西。 然而,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
}
}
}
}