Step 1:
Define model class
where you map request payload.
public class RequestDto {
private String description;
private MultipartFile[] documents;
.....
.....
}
Step 2: Map request payload using @ModelAttribute
annotation.
@PostMapping("/profile")
public ResponseEntity<responseDto> createProfile(@ModelAttribute RequestDto requestDto) throws IOException {
MultipartFile[] files = requestDto.getDocuments();
responseDto responseDto = new responseDto();
responseDto.setDescription(requestDto.getDescription());
if (files == null || files.length == 0) {
return new ResponseEntity<>(responseDto, HttpStatus.CREATED);
}
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
String content = convertToString(file.getInputStream());
if (responseDto.getFileContent().containsKey(fileName)) {
String existingContent = responseDto.getFileContent().get(fileName);
content = existingContent + "\n\n" + content;
}
responseDto.getFileContent().put(fileName, content);
}
return new ResponseEntity<>(responseDto, HttpStatus.CREATED);
}
Find below
working application.
Step 1:
Create new maven
project.
Step 2:
Update pom.xml with
spring dependencies.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springFileUpload</groupId>
<artifactId>springFileUpload</artifactId>
<version>1</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<name>springbootApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
Step 3:
Define model classes.
package com.sample.app.model;
import org.springframework.web.multipart.MultipartFile;
public class RequestDto {
private String description;
private MultipartFile[] documents;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public MultipartFile[] getDocuments() {
return documents;
}
public void setDocuments(MultipartFile[] document) {
this.documents = document;
}
}
ResponseDto.java
package com.sample.app.model;
import java.util.HashMap;
import java.util.Map;
public class ResponseDto {
private String description;
private Map<String, String> fileContent = new HashMap<> ();
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Map<String, String> getFileContent() {
return fileContent;
}
public void setFileContent(Map<String, String> fileContent) {
this.fileContent = fileContent;
}
}
Step 4:
Define controller.
package com.sample.app.controller;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.sample.app.model.RequestDto;
import com.sample.app.model.ResponseDto;
@RestController
public class FileController {
@PostMapping("/profile")
public ResponseEntity<ResponseDto> createProfile(@ModelAttribute RequestDto requestDto) throws IOException {
MultipartFile[] files = requestDto.getDocuments();
ResponseDto responseDto = new ResponseDto();
responseDto.setDescription(requestDto.getDescription());
if (files == null || files.length == 0) {
return new ResponseEntity<>(responseDto, HttpStatus.CREATED);
}
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
String content = convertToString(file.getInputStream());
if (responseDto.getFileContent().containsKey(fileName)) {
String existingContent = responseDto.getFileContent().get(fileName);
content = existingContent + "\n\n" + content;
}
responseDto.getFileContent().put(fileName, content);
}
return new ResponseEntity<>(responseDto, HttpStatus.CREATED);
}
private static String convertToString(InputStream in) throws IOException {
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
return result.toString("UTF-8");
}
}
Step 5:
Define App.java
package com.sample.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Run
App.java.
Hit below
request in Postman.
Under Body
tab, select form-data.
Add the
field description and multiple documents with name ‘documents’.
Once you
attached the documents, click on Send button to post the payload. You will
receive the description and content of the documents in response.
You can
download complete working application from this link.
No comments:
Post a Comment