#spring #spring-boot #spring-resttemplate
#весна #весенняя загрузка #spring-resttemplate
Вопрос:
Я хочу использовать API преобразования JSON в CSV после получения JSON из моего собственного API. API преобразования JSON в CSV требует отправки электронной почты и JSON в запросе POST. Теперь я могу хранить JSON локально, но как мне передать как электронное письмо, так и JSON в запросе и как мне обработать CSV из ответа?
Контроллер
@PostMapping("/generateExcel")
public String getEmployeeCsv(@RequestBody String email) {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
String json = restTemplate.exchange("http://localhost:8080/SwaggerTest/employees", HttpMethod.GET, entity, String.class).getBody();
entity = new HttpEntity<String>(json, email, headers);
return restTemplate.exchange("https://json-csv.com/api/getcsv", HttpMethod.POST, entity, String.class).getBody();
}
Обновить:
Я создал EmployeeCsvParams
класс с полями электронной почты и строки json, как предложил @Adrien, но мне все равно нужно обработать CSV из ответа.
@PostMapping("/generateExcel")
public String getEmployeeCsv(@RequestBody String email) {
HttpHeaders headers = new HttpHeaders();
EmployeeCsvParams params = new EmployeeCsvParams();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
String json = restTemplate.exchange("http://localhost:8080/SwaggerTest/employees", HttpMethod.GET, entity, String.class).getBody();
params.setEmail(email);
params.setJson(json);
HttpEntity<EmployeeCsvParams> entity2 = new HttpEntity<EmployeeCsvParams>(params, headers);
return restTemplate.exchange("https://json-csv.com/api/getcsv", HttpMethod.POST, entity2, String.class).getBody();
}
Ответ №1:
Из spring docs @RequestBody «Вы можете использовать аннотацию @RequestBody для чтения тела запроса и десериализации в объект через HttpMessageConverter. …»
Итак, я предполагаю, что вы можете создать объект ниже и использовать его в качестве аргумента в своей конечной точке.
public class EmployeeCsvParams {
/* Fields */
private String email;
private String json;
/* Getters and Setters */
public String getEmail() { return this.email; }
public void setEmail(String email) { this.email = email; }
public String getJson() { return this.json; }
public void setJson(String json) { this.json = json; }
}
@PostMapping("/generateExcel")
public String getEmployeeCsv(@RequestBody EmployeeCsvParams employeeCsvParams)
{
/* ... */
}
Комментарии:
1. Спасибо @Adrien! Любая идея о том, как я должен обрабатывать CSV, поскольку я действительно получаю ответ 200 OK.