HTTPClient + enviar objeto por POST

Estou estudando a biblioteca HTTP Client/ HTTP Core para fazer requisições à uma aplicação que disponibiliza resources do VRaptor.
Consegui passar uma String e receber na aplicação que está no servidor:

HttpClient client = new DefaultHttpClient();
		
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("parametro", "teste"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
		
HttpPost httppost = new HttpPost( endereco );
httppost.setEntity(entity);
		
client.execute(httppost);

VRaptor:

[code]@Resource
public class VendasController
{

public class teste(String parametro)
{
//aqui o parametro tem o texto “teste”
}

}[/code]

Porém, como faço para passar um objeto? Devo passo-lo como bytes, string, qual a melhor maneira?

eu nao entendo muito bem isso nao mais tenho um geito aqui pra vc …!!

vc quer passar um parâmetro pra uma classe de bens ???

se for isso tenta …
primeiro inportar o benas…na sua classe .html ,.jsp, seja o q for …

[color=blue]<jsp:useBean id=“NOMEbeans_NAclasse” class=“NOMEdoPACOTE.NOMEdoBEANS”>[/color]

id e o nome q seu benas vai ter sua classe .html,.jsp ou outras …
aqui e como se fosse um form o nome do atributo e seu valor

[color=blue]<jsp:setProperty name=“NOMEbeans_NAclasse” property=“NOMEparametro” value=“45687 ou abcd… ou <%=CPF%>”/>[/color]

o parametro deve ter o menos nome q uma variavel sua classe benas …

fexar a instruçao

[color=blue]</jsp:useBean>[/color]

ja se vc quiser passar para uma outra classe html ou jsp e assim …

nome de qual classe vai os parametros

[color=blue]<jsp:forward page=“Classe.jsp”>[/color]

aqui e como se fosse um form o nome do atributo e seu valor

[color=blue]<jsp:param name=“NOMEatributo” value=“abcdef… ou 12345… ou <%=valor%>”/>[/color]

 fexar a instruçao

[color=blue]</jsp:forward>[/color]

espero ter ajudado !!!

Não quero fazer essa requisição de uma página JSP.
E sim de um código Java que ficará dentro de uma aplicação Swing.

Rafael, passar o objeto como parâmetro do POST não sei se dá. Mas você pode passar os atributos da classe como parâmetros do POST.
Por exemplo, se vc tem uma classe chamada Pessoa, que tem 2 atributos: nome e idade. Ficaria assim:

Pessoa p = new Pessoa("Rafael", 25);
HttpClient client = new HttpClient();
NameValuePair[] params = {
            new NameValuePair("nome", p.getNome()),
            new NameValuePair("idade", p.getIdade())
        };
PostMethod method = new PostMethod(url);
method.setRequestBody(params);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
                new DefaultHttpMethodRetryHandler(3, false));
try {
        int statusCode = client.executeMethod(method);
} catch (Exception e) {
        logger.fatal(e.toString(), e);
            throw e;
} finally {
        method.releaseConnection();
}

Daí, quem for receber o POST, recupera os parâmetros separadamente e monta uma instância da classe Pessoa.

RafaelViana, você pode usar o Restfulie para fazer isso (http://restfulie.caelum.com.br), assim vc não vai precisar nem mexer com o httpClient.
exemplos aqui: https://github.com/caelum/restfulie-java
e aqui: https://github.com/caelum/restfulie-java/tree/master/example/rest_from_scratch/part_1

ele basicamente vai transformar seu objeto em xml e o vraptor vai pegar o xml e transformá-lo em objeto de novo.

Opa… valeu Lucas. Sempre com respostas de alto nível.

Já havia visto um video demonstrando o Restfulie em Ruby :smiley: Posso usar outros formatos como JSON?

pode sim, só mudar o content-type do accepts, do as e do @Consumes