目录
一、概况
在实际的开发应用当中,我们有时需要开放一个公共的接口让第三方给我们推送数据,但是很多第三方厂家买的是别人的软件或者交接人员不是开发人员,没有程序源码,不知道推送的是什么格式的数据。
这就需要我们自己使用代码解析出来,在这里可以借用
HttpServletRequest
来解析字符串、JSON、XML以及文件数据等。
二、程序源码
java
@PostMapping("/push")
public AjaxResult push(HttpServletRequest request) {
try {
String contentType = request.getContentType();
log.info(String.format("摄像头报警请求参数类型:%s", contentType));
if (contentType.contains("multipart/form-data;")) {
readFile(request);
} else {
readParams(request);
}
return success();
} catch (Exception e) {
return success();
}
}
读取文件参数
java
public void readFile(HttpServletRequest request) {
log.info(String.format("摄像头报警请求参数:%s", "文件"));
// 由于HttpServletRequest不能直接取出文件数据,所以将其强制转换为MultipartHttpServletRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
log.info(String.format("摄像头报警请求参数:%s", String.valueOf(fileMap)));
fileMap.forEach((key, value) -> {
try {
log.info(String.format("key:%s, value:%s", key, value.getName()));
String filePath = RuoYiConfig.getUploadPath(); // 上传文件路径
String fileName = FileUploadUtils.upload(filePath, value);
log.info(String.format("文件已经下载:%s", fileName));
} catch (IOException e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
});
}
读取非文件参数
java
public void readParams(HttpServletRequest request) {
StringBuilder data = new StringBuilder();
String line;
BufferedReader reader;
try {
reader = request.getReader();
while (null != (line = reader.readLine())) {
data.append(line);
}
} catch (IOException e) {
log.error(e.getMessage());
}
log.info(String.format("摄像头报警请求参数:%s", data));
}