![enter image description here](https://i.stack.imgur.com/Ud98N.png)
Поток приложений :
Рисунок выше дает представление о приложениях, использующих другие приложения REST API. Предположим, что каждый блок, поскольку каждое отдельное приложение REST предоставляет API REST и использует API других приложений. ' C ' - это фактическая конечная точка, которая предоставляет API для загрузки файла (.pdf) и использовалась приложением B с добавленными проверками и уровнем безопасности. Моя часть разработки предназначена для приложения " A ", и у меня нет никакого контроля над B и C , за исключением использования API, предоставляемого B .
моя задача разработки : Как уже говорилось, моя часть задачи заключается в разработке A (приложение REST), которое предоставляет API для загрузки файла с некоторой добавленной бизнес-логикой и потребляет API приложения B , который будет интернировать, использует приложение C для загрузки документа.
Build.sbt
val jerseyVersion = "2.23.1"
libraryDependencies ++= Seq(
"org.glassfish.jersey.containers" % "jersey-container-servlet" % jerseyVersion,
"org.glassfish.jersey.media" % "jersey-media-multipart" % jerseyVersion,
"org.glassfish.jersey.media" % "jersey-media-json-jackson" % jerseyVersion,
"org.glassfish.jersey.ext" % "jersey-bean-validation" % jerseyVersion,
"org.glassfish.jersey.core" % "jersey-server" % jerseyVersion,
"org.glassfish.jersey.core" % "jersey-client" % jerseyVersion,
"org.glassfish.jersey.containers" % "jersey-container-grizzly2-http" % jerseyVersion,
"javax.servlet" % "javax.servlet-api" % "3.1.0",
"com.fasterxml.jackson.core" % "jackson-databind" % "2.9.8"
)
Код
@Path("/resource/document")
@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_JSON})
@Produces("application/json")
public Response<String> uploadDocument(@FormDataParam("empData") FormDataBodyPart empJson,
@FormDataParam("source") String source,
@FormDataParam("description") String description,
@FormDataParam("file") InputStream uploadFileInputStream,
@FormDataParam("file") FormDataContentDisposition fileMetaData){
FormDataMultiPart multiPart = new FormDataMultiPart();
final EmployeeDetails empDetails = empJson.getValueAs(EmployeeDetails.class);
multiPart = multiPart.field("empData",empDetails.getName());
multiPart = multiPart.field("country",empDetails.getCountry());
multiPart = multiPart.field("source",source)
.field("sourceDescription", description)
.field("docDate", LocalDate.now().toString())
.field("docLanguage","English")
.field("recDate",LocalDate.now().toString())
.field("additionalInformation",fileMetaData.getFileName())
.field("docName",fileMetaData.getName());
/*FormDataBodyPart bodyPart = new FormDataBodyPart("file",uploadFileInputStream.,MediaType.APPLICATION_OCTET_STREAM);*/
return null;
}
Выпуск :
Это первый раз, когда я использую Jersey lib. Как видно из приведенного выше кода, я использовал @FormDataParam("file") InputStream uploadFileInputStream
для получения потока ввода файла, и мне нужно отправить его в API приложения B , который выполняет всю остальную работу по загрузке файла до конечной конечной точки. Но проблема в том, как мне отправить его в приложение B для загрузки API. Я не хочу сохранять полученный InputStream в файл на сервере, где запущено приложение A , создать объект File и отправить его. Есть ли способ преобразовать этот InputStream в объект File или любой другой объект, чтобы я мог отправить его в API загрузки приложения B , используя клиент jersey 2.
Сообщите мне, нужна ли какая-либо дополнительная информация или код, чтобы помочь мне решить проблему.
Просто записка. Приведенный ниже код неполон, так как я застрял при преобразовании InputStream в File для отправки его в API загрузки B.
Технический стек :
Java 8,
IntelliJ,
SBT build,
трикотаж 2
ограничение :
Я использую майку 2 для сервера и клиента, и я не могу изменить технологический стек, как вместо майки, я не могу использовать Spring Boot или любую другую, и мне нужно придерживаться майки, но я открыт для использования любой версии майки (майка 1 или трикотаж 2)