Código de error 415 al reenviar un post de una API a otro

José Azevedo:

Estoy enviando un tipo de aplicación / JSON desde el cliente cartero a una API Java que reenvía todas las peticiones a la API específica para ese caso. En este caso concreto, tengo una API de inicio de sesión y quiero código de centro escuchado esta JSON:

JSON del cartero

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

La API que hace el delantero

@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";
    }

}

Esa nueva dirección URL es la dirección URL si la otra API es (que, en este caso, es localhost:8080y es del application.propertiesarchivo).

introducir descripción de la imagen aquí

He probado la API de inicio de sesión a través de cartero y funciona, pero cuando intento conectar a esa API adelante me dieron el siguiente error:

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

Me gustaría saber lo que estoy haciendo mal o una forma alternativa de hacerlo.

llamada del cartero introducir descripción de la imagen aquí

Segundo código de punto final introducir descripción de la imagen aquí

El valor del cuerpo pasa al segundo punto final introducir descripción de la imagen aquí

La clase de usuario

Usuario public class {

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;
}
podómetro:

El problema es que usted está recibiendo el 415código de error. Eso significa que su /loginpunto final no está esperando que el tipo de carga útil que le está enviando, ver aquí

415 (no admitido Tipo de papel)

La respuesta de 415 error indica que la API no es capaz de procesar presentarse Tipo de medios del cliente, como se indica en la solicitud de cabecera Content-Type. Por ejemplo, una solicitud de cliente incluyendo datos formateados como application / xml se recibe una respuesta 415 si el API sólo está dispuesto para procesar datos formateados como application / json.

Por ejemplo, el cliente carga una imagen como imagen / svg + xml, pero el servidor requiere que las imágenes utilizan un formato diferente.

Creo que es esto porque cuando se llama postForObject, no está diciendo el tipo de soporte de la carga útil. Así que en lugar de enviar la cadena JSON solo, que necesita para envolverlo en una HttpEntityque sostiene el cuerpo y también una cabecera que especifica el tipo de soporte de la carga útil va a reenviar. Probar esto:

...
} 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);
}
...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=281828&siteId=1
Recomendado
Clasificación