Spring RestTemplate:异常发送 byte[] 到邮件 API

问题描述 投票:0回答:0

我必须使用一个 Mail API,但我无法通过我的 Spring 应用程序发送信息。当我在 Postman 上复制/粘贴我的 HttpEntity 的“正文”时,它可以完美交付,但使用 RestTemplate 似乎无法正常工作。我什至尝试制作一个 toString 方法来匹配 PostMan 调用的格式,但即使那样它也不起作用。这些是我的 Java 类和 toString 方法:

@Builder
public class CreateAndQueueMailRq {
private String application;
private String bcc;
private String body;
private String cc;
private String creationDate;
private String creationUser;
private String from;
private String fromName;
private String id;
private String market;
private String subject;
private String system;
private String to;
private String language;
private String type;
private String attachmentType;
private String attachmentFileName;
private byte[] content;

@Override
public String toString() {
    return "{\"application\":\"" + application + "\","
            + "\"bcc\":\"" + bcc + "\","
            + "\"body\":\"" + body + "\","
            + "\"cc\":\"" + cc + "\","
            + "\"creationDate\":\"" + creationDate + "\","
            + "\"creationUser\":\"" + creationUser + "\","
            + "\"from\":\"" + from + "\","
            + "\"fromName\":\"" + fromName + "\","
            + "\"id\":\"" + id + "\","
            + "\"market\":\"" + market + "\","
            + "\"subject\":\"" + subject + "\","
            + "\"system\":\"" + system + "\","
            + "\"to\":\"" + to + "\","
            + "\"language\":\"" + language + "\","
            + "\"type\":\"" + type + "\","
            + "\"attachmentType\":\"" + attachmentType + "\","
            + "\"attachmentFileName\":\"" + attachmentFileName + "\","
            + "\"content\":" + Arrays.toString(content) + "}";
}

这就是我打电话的方式:

public boolean sendMailWithAttachment(String body, String from, String fromName,
                                      String id, String subject, String to, String language,
                                      String filename, byte[] content, String cc, String bcc){

    CreateAndQueueMailRq createAndQueueMailRq = CreateAndQueueMailRq.builder()
            .application("appname")
            .bcc("")
            .body(body)
            .cc("[email protected]")
            .creationDate(LocalDateTime.now().format(FORMATTER))
            .creationUser(MailManagerConstants.COMING2)
            .from(from)
            .fromName(fromName)
            .id(id)
            .market("market_default")
            .subject(subject)
            .system("system_default")
            .to("[email protected]")
            //.to("[email protected]")
            .language("ES")
            .type(DEFAULT_TYPE)
            .attachmentType(MailManagerConstants.TYPE_PDF)
            .attachmentFileName(filename)
            .content(content)
            .build();

    return generateRequest(createAndQueueMailRq, API_MAIL_MANAGER_WITH_ATTACHMENT);
}

private boolean generateRequest(CreateAndQueueMailRq createAndQueueMailRq, String api) {
    //ObjectMapper objectMapper = new ObjectMapper();
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
    try {
        //HttpEntity<String> request = new HttpEntity<>(objectMapper.writeValueAsString(createAndQueueMailRq), headers);
        HttpEntity<CreateAndQueueMailRq> request = new HttpEntity<>(createAndQueueMailRq, headers);
        System.out.println("Request: "+request.getBody());
        ResponseEntity<?> response = restTemplate.exchange(api, HttpMethod.POST, request, String.class);
        LOGGER.info(SUCCESS_MESSAGE);
        return true;
    }catch (HttpClientErrorException e){
        LOGGER.info("STATUS CODE: "+e.getStatusCode());
        LOGGER.info("RESPONSE BODY: "+e.getResponseBodyAsString());
        LOGGER.info(ERROR_MESSAGE);
        return false;
}
}

如果我复制粘贴 e.getResponseBodyAsString(),它适用于 Postman。

java spring api resttemplate httpentity
© www.soinside.com 2019 - 2024. All rights reserved.