Код ошибки 415 при пересылке POST из API в другой - PullRequest
0 голосов
/ 04 марта 2019

Я отправляю тип приложения / json из клиента почтальона в API Java, который перенаправляет все запросы в конкретный API для этого случая.В этом конкретном случае у меня есть API входа в систему, и я хочу, чтобы центральный код слышал этот JSON:

JSON от почтальона

{
    "name": "random name",
    "password": "random passwd"
}

APIкоторый выполняет переадресацию

@RequestMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String redirectHttpRequest(HttpServletRequest request, @Value("${endpoint}") String newURL,
        HttpServletResponse response) throws IOException {

    try {

        RestTemplate restTemplate = new RestTemplate();
        String result = null;


        String body = IOUtils.toString(request.getReader());

        if (request.getMethod().equals("GET")) {
            // result = restTemplate.getForObject(redirectUrl.toString(), String.class);
        } else if (request.getMethod().equals("POST")) {
            result = restTemplate.postForObject(newURL, body, String.class);

        }
        return result;

    } catch (HttpClientErrorException e) {
        System.out.println(e);
        return "OLA";
    }

}

Этот новый URL-адрес является URL-адресом, которым является другой API (в данном случае это localhost:8080 и из файла application.properties).

enter image description here

Я проверил API входа через почтальона, и он работает, но когда я пытаюсь подключить его к этому API пересылки, я получил следующую ошибку:

org.springframework.web.client.HttpClientErrorException: 415 null.

Я хотел бы знать, что я делаю неправильно, или альтернативный способ сделать это.

Звонок почтальона enter image description here

Второй код конечной точки enter image description here

Значение тела, переданного второй конечной точке enter image description here

Класс пользователя

открытый класс Пользователь{

private String name;

private String password;

private List<String> groups;

public User(String name, String password) {
    this.name = name;
    this.password = password;
    this.groups = new ArrayList<String>();
}

public User() {

}

public String getName() {
    return this.name;
}

public String getPassword() {
    return this.password;
}

public List<String> getGroups() {
    return this.groups;
}

public String toString() {
    return "User: " + this.name + "\nGroups: " + this.groups;
}

1 Ответ

0 голосов
/ 04 марта 2019

Проблема в том, что вы получаете код ошибки 415.Это означает, что ваша конечная точка /login не ожидает тип отправляемой им полезной нагрузки, см. здесь

415 (неподдерживаемый тип носителя)

415сообщение об ошибке означает, что API не может обработать предоставленный клиентом тип мультимедиа, как указано в заголовке запроса Content-Type.Например, клиентский запрос, включающий данные, отформатированные как application / xml, получит ответ 415, если API только желает обработать данные, отформатированные как application / json.

Например, клиент загружает изображение как image /svg + xml, но сервер требует, чтобы изображения использовали другой формат.

Я думаю, это так, потому что когда вы звоните postForObject, вы не указываете тип носителя вашей полезной нагрузки.Таким образом, вместо того, чтобы отправлять только строку json, вам нужно заключить ее в HttpEntity, который содержит тело, а также заголовок, который задает тип носителя для полезной нагрузки, которую вы пересылаете.Попробуйте это:

...
} else if (request.getMethod().equals("POST")) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
    HttpEntity<String> entity = new HttpEntity<>(body, headers);
    result = restTemplate.postForObject(newURL, entity, String.class);
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...