本文介绍: 也能理解的,毕竟这个本身只是用来文件上传的,存在其它参数也需要读取出来,就不太容易。如果是在HttpServletRequest中读取个请求参数,那是相当easy,可这不是servlet,拿到的只是HttpRequest,请求参数没办法从HttpRequest中读取。我们可以注意到,输出的报文的字段,会通过content–type的boundary进行分割。在一个项目里,需要对RestTemplate请求打印日志,包括请求报文、请求参数等内容。类型的请求报文,打印日志的时候,格式非常奇怪。
背景
在一个项目里,需要对RestTemplate请求打印日志,包括请求报文、请求参数等内容。可是对于content–type为mutipart/form-data
类型的请求报文,打印日志的时候,格式非常奇怪。
分析
也能理解的,毕竟这个本身只是用来文件上传的,存在其它参数也需要读取出来,就不太容易。如果是在HttpServletRequest中读取个请求参数,那是相当easy,可这不是servlet,拿到的只是HttpRequest,请求参数没办法从HttpRequest中读取。那就只能采用下下策,对输出的字符串进行提取。我们可以注意到,输出的报文的字段,会通过content–type的boundary进行分割。先通过boundary分割字段,再进行关键文字提取。
public static Map<String, String> parseMultipartRequest(String requestBody, String contentTypeString) {
String boundary = extractBoundary(contentTypeString);
Map<String, String> formData = new HashMap<>();
String[] parts = requestBody.split("--" + boundary);
for (String part : parts) {
if (part.trim().isEmpty()) {
continue; // Skip empty parts
}
String[] headersAndContent = part.split("rnrn", 2);
String[] headers = headersAndContent[0].split("rn");
if (header.length < 2) continue;
String content = headersAndContent[1].trim();
Map<String, String> partData = extractPartData(headers, content);
formData.putAll(partData);
}
return formData;
}
private static Map<String, String> extractPartData(String[] headers, String content) {
Map<String, String> partData = new HashMap<>();
// Extract name from Content-Disposition header
String name = null;
for (String header : headers) {
if (header.startsWith("Content-Disposition")) {
name = header.split('name="')[1].split('"')[0];
break;
}
}
if (name != null) {
partData.put(name, content);
}
return partData;
}
private String extractBoundary(String contentType) {
String[] parts = contentType.split(";");
for (String part : parts) {
part = part.trim();
if (part.startsWith("boundary=")) {
return part.substring("boundary=".length());
}
}
throw new IllegalArgumentException("Boundary not found in Content-Type header");
}
原文地址:https://blog.csdn.net/interestANd/article/details/134786159
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_39044.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。