Estoy comunicando con un servicio web que espera un parámetro POST y también esperar cuerpo de Solicitud. Me han confirmado que una solicitud POST se puede hacer uso de una Consola de DESCANSO que tengo, pero soy incapaz de hacer una solicitud en Java usando Apache bibliotecas.

En el código de abajo, yo soy capaz de PUBLICAR en la web del servicio, y se recibe correctamente el contenido de la variable raw_body. Si se me quite el comentario de la primera de las dos líneas de comentarios, el servicio web recibe el «fname» parámetro, pero ya no recibe el cuerpo del POST.

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
...

HttpClient httpClient = new HttpClient();
String urlStr = "http://localhost:8080/MyRestWebService/save";
PostMethod method = new PostMethod(urlStr);
String raw_body = "This is a very long string, much too long to be just another parameter";
RequestEntity re = new StringRequestEntity(raw_body, "text/xml", "UTF-16");
//method.addParameter("fname", "test.txt");
//httpClient.getParams().setParameter("fname", "test.txt");
method.setRequestEntity(re);

¿Cómo puedo transmitir tanto el parámetro y el cuerpo?

OriginalEl autor Data Skeptic | 2012-10-01

2 Comentarios

  1. 4

    Podría utilizar el setQueryString método para agregar los parámetros a la URL que está siendo Publicado. Luego de un Reparador punto de vista, yo diría que normalmente no deben hacer eso, sin embargo, desde un puesto debe representar una llamada a un recurso y cualquier cosa que pueda calificar para un parámetro de consulta debe ser incluido en la representación que está siendo transferida en el cuerpo de solicitud…o debería representar la cualificación de los recursos de la misma, en cuyo caso debe ser parte de la ruta que es publicado para que luego podrían ser extraídos por el controlador usando la @PathVariable/@PathParam o algo similar. Así que en tu caso también podría estar buscando algo como POST /MyRestWebService/files/test.txt o más apropiadamente un PUESTO si vas a guardar el recurso y conocer el URI. El código en el servidor podría tirar el nombre de archivo a partir de un patrón de URL.

    Ah, este es perfecto. setQueryString es exactamente lo que yo necesitaba. Sus comentarios acerca de esto no ser muy Relajante y también que debería de ser una solicitud PUT se toman bien. Gracias por la dirección mí en la dirección correcta.

    OriginalEl autor

  2. 3

    Que usted necesita para hacer una petición POST usando varias partes de forma. Aquí está el ejemplo:

    Apache HttpClient haciendo formulario multipart post

    Alternativamente, usted puede hacer una petición POST con el contenido (parámetros y archivos) codificado con application/x-www-form-urlencoded, pero no es recomendable cuando se desea hacer una petición POST con gran contenido, como los archivos.

    Esto me demuestra cómo hacer que una parte de múltiples post si me había varios objetos de gran tamaño para enviar más (que no es aplicable a mi problema), y no me da ninguna información sobre la forma de incluir el parámetro que necesito pasar.
    eso no es cierto. también se aplica a las pequeñas parámetros. la adición de cadena de consulta a una solicitud POST no es recomendable. algunos http controlador de software no pueden analizar la parte de la consulta de una solicitud POST ya que no se esperaba eso. si no funciona en el servidor, que puede ser la causa. mientras trabaja en su servidor, a continuación, utilizar lo que funciona mejor para usted. pero desde la perspectiva del diseño, no es recomendable.

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here