Spring Boot作为接口转发器和文件转发器的实现
接口转发
controller
@ResponseBody
@PostMapping("/adapter-test")
public JSONObject adapterTest(@RequestBody Map<String, Object> requestMap) {
return testService.adapterTest(requestMap);
}
service
@Autowired
private RestTemplate restTemplate;
public JSONObject adapterTest(Map<String, Object> requestMap) {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
// 鉴权用,可选
headers.add("Authorization", "Bearer xxxxx");
String remoteUrl = requestMap.get("remoteUrl").toString();
JSONObject remoteRequestMap = new JSONObject();
remoteRequestMap.putAll(requestMap);
HttpEntity<JSONObject> entity = new HttpEntity<>(remoteRequestMap, headers);
return restTemplate.postForObject(remoteUrl, entity, JSONObject.class);
}
request demo
{
...
"remoteUrl":"http://..."
}
文件转发
controller
@ResponseBody
@PostMapping("/file-adapter-test")
public JSONObject fileAdapterTest(@RequestParam(value = "remoteUrl") String remoteUrl, MultipartFile file) {
return testService.fileAdapterTest(remoteUrl, file);
}
service
public JSONObject fileAdapterTest(String remoteUrl, MultipartFile file) {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType(MediaType.MULTIPART_FORM_DATA_VALUE);
headers.setContentType(type);
// 鉴权用,可选
headers.add("Authorization", "Bearer xxxxx");
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
// 转换成File对象
String fileName = file.getOriginalFilename();
Assert.notNull(fileName, "获取上传的原始文件名不能为空");
File localFile = new File(fileName);
try (OutputStream out = new FileOutputStream(localFile)) {
// 输入流和输出流之间的拷贝
FileCopyUtils.copy(file.getInputStream(), out);
// 文件转换并设置为参数
params.add("file", new FileSystemResource(localFile));
} catch (IOException e) {
throw new ServiceException("上传的文件转换异常");
}
HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(params, headers);
JSONObject resultJson = restTemplate.postForObject(remoteUrl, entity, JSONObject.class);
// 删掉缓存的文件
localFile.delete();
return resultJson;
}
request demo
