У меня есть приложение Spring MVC, которое принимает запросы от пользовательского интерфейса (multiform и json), и оно должно отправлять эти данные в другой микро-сервис, используя Spring RestTemplate. Копирование запроса в виде строки в RestTemplate прекрасно работает в случае типа содержимого json, но, похоже, не работает в случае multipart.
Вот мой пример кода
Spring MVC контроллер:
@Controller
public class MvcController {
@RequestMapping(value = "/api/microservice", method = RequestMethod.POST)
public ResponseEntity<?> callMicroservice(HttpServletRequest request) throws Exception {
RestTemplate rest = new RestTemplate();
String payload = IOUtils.toString(request.getReader());
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", request.getHeader("Content-Type"));
HttpEntity<String> requestEntity = new HttpEntity<String>(payload, headers);
return rest.exchange("https://remote.micrservice.com/api/backendservice", HttpMethod.POST, requestEntity, String.class);
}
}
А вот как выглядит микросервис бэкэнда
@Controller
public class RestController {
@RequestMapping(value = "/api/backendservice", method = RequestMethod.POST)
public @ResponseBody Object createService(@RequestParam(value = "jsondata") String jsondata,
@RequestParam(value = "email") String email,@RequestParam(value = "xsltFile", required = false) MultipartFile xsltFile,
HttpServletRequest request) {
// process jsondata
// process xsltFile
// send response
}
}
Если вы посмотрите на MvcController, я посылаю полезную нагрузку в виде строки
String payload = IOUtils.toString(request.getReader());
Вместо этого, как я могу отправить данные запроса, как они есть на запрос RestTemplate, чтобы он работал как для строки, так и для нескольких частей. Если вы посмотрите на подпись MvcController, я не знаю, какую информацию пользователь будет отправлять в то время, когда я не знаю, что будет подписью микросервиса. Мне просто нужно передать данные между MvcController и запросом RestTemplate.