DIV*_*IVA 2 rest json spring-boot postman
我有POST请求api调用,以从客户端(邮递员或Java客户端)接受json主体请求参数和多部分文件。
我想在单个请求中同时传递json数据和多部分文件。
我已经编写了如下代码。
@RequestMapping(value = "/sendData", method = RequestMethod.POST, consumes = "multipart/form-data")
public ResponseEntity<MailResponse> sendMail(@RequestPart MailRequestWrapper request) throws IOException
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用邮递员休息客户端来完成它。
我在服务器端使用spring boot。
任何人都可以在这个问题上建议我。
提前致谢,
小智 14
您可以同时使用它们。
@RequestPart:此注释将多部分请求的一部分与方法参数相关联,这对于将复杂的多属性数据作为有效负载(例如 JSON 或 XML)发送非常有用。
换句话说,请求部分将请求中的 json 字符串对象解析为类对象。另一方面,Request Param 只是从你的 json 字符串值中获取字符串值。
例如,使用请求部分:
@RestController
@CrossOrigin(origins = "*", methods= {RequestMethod.POST, RequestMethod.GET,
RequestMethod.PUT})
@RequestMapping("/api/api-example")
public class ExampleController{
@PostMapping("/endpoint-example")
public ResponseEntity<Object> methodExample(
@RequestPart("test_file") MultipartFile file,
@RequestPart("test_json") ClassExample class_example) {
/* do something */
}
}
Run Code Online (Sandbox Code Playgroud)
@RequestParam:发送多部分数据的另一种方法是使用@RequestParam。这对于简单数据特别有用,这些数据作为键/值对与文件一起发送,正如我所说,只是键/值。还用于从查询参数中获取值,我认为这是它的主要目标。
您可以将@RequestParam和Converter用于JSON对象的
简单示例:
@SpringBootApplication
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
@Data
public static class User {
private String name;
private String lastName;
}
@Component
public static class StringToUserConverter implements Converter<String, User> {
@Autowired
private ObjectMapper objectMapper;
@Override
@SneakyThrows
public User convert(String source) {
return objectMapper.readValue(source, User.class);
}
}
@RestController
public static class MyController {
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file,
@RequestParam("user") User user) {
return user + "\n" + file.getOriginalFilename() + "\n" + file.getSize();
}
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
apache httpclient 4.5.6示例:
pom.xml依赖项:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.6</version>
</dependency>
<!--dependency for IO utils-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
服务将在应用程序完全启动后运行,更改File文件的路径
@Service
public class ApacheHttpClientExample implements ApplicationRunner {
private final ObjectMapper mapper;
public ApacheHttpClientExample(ObjectMapper mapper) {
this.mapper = mapper;
}
@Override
public void run(ApplicationArguments args) {
try (CloseableHttpClient client = HttpClientBuilder.create().build()) {
File file = new File("yourFilePath/src/main/resources/foo.json");
HttpPost httpPost = new HttpPost("http://localhost:8080/upload");
ExampleApplication.User user = new ExampleApplication.User();
user.setName("foo");
user.setLastName("bar");
StringBody userBody = new StringBody(mapper.writeValueAsString(user), MULTIPART_FORM_DATA);
FileBody fileBody = new FileBody(file, DEFAULT_BINARY);
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.addPart("user", userBody);
entityBuilder.addPart("file", fileBody);
HttpEntity entity = entityBuilder.build();
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
// print response
System.out.println(IOUtils.toString(responseEntity.getContent(), UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制台输出如下所示:
ExampleApplication.User(name=foo, lastName=bar)
foo.json
41
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6327 次 |
| 最近记录: |