quinta-feira, 17 de junho de 2010

Recuperar os parametros de uma requisição HTTP

Segue um exemplo de um método que recupera um enumeration dos parametros de uma requisição:

private void getParameters(HttpServletRequest request){
Enumeration e = request.getParameterNames();

while (e.hasMoreElements()) {
String parameterName = (String) e.nextElement();

String[] parametervalues = request.getParameterValues(parameterName);
}
}

terça-feira, 8 de junho de 2010

Merge de propriedades

Olá pessoal,

Fiz esse pequeno utilitário para sincronizar os métodos get e set de dois objetos.

Fiz isso objetivando atender um caso de atualização de cadastro, evitando fazer cansativos get de um objeto seguido do set para outro objeto destino do valor.

Vocês podem usar a vontade e se houver algum melhoramento, por favor comuniquem.

Código da classe


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
*
* @author Marcelo Garcia
*
*/
public class MergeProperties {

/**
* Realiza o merge dos valores do objeto origem para o objeto destino.
*
* Os metodos que sao capturados pelo algoritmo sao metodos GET e
* que nao possuem parametro.
*
* Os valores sao capturados a partir dos metodos GET existentes na
* classe origem. Isso quer dizer que caso o destino seja uma subclasse
* de origem, os seus metodos nao serao reconhecidos.

* Somente valores nao nulos sao passados de origem para destino.
* Campos string vazios e numericos zerados sao permitidos.
*
* @param
* @param destino: Recebera os valores de origem
* @param origem: Objeto cujas propriedades serao transferidas para o destino
* @return o objeto modificado
*/
public static C mergeProperties(C destino, C origem) {
Method[] metodos = origem.getClass().getMethods();
String nomeMetodo;
String nomeMetodoSemGet;

try {
for (Method metodo : metodos) {
nomeMetodo = metodo.getName();
nomeMetodoSemGet = nomeMetodo.substring(3,nomeMetodo.length());
//Testa se é um método get
if (!nomeMetodo.substring(0,3).equals("get"))
continue;
if (metodo.getParameterTypes().length != 0)
continue;
Object valor = metodo.invoke(origem);
if (valor == null)
continue;
//Captura o metodo SET de acordo com o tipo de retorno do metodo GET
Method metodoSET = destino.getClass().getMethod("set"+nomeMetodoSemGet, metodo.getReturnType());
if (metodo != null)
metodoSET.invoke(destino, valor);
}
}
catch (NoSuchMethodException e) {
System.out.println("Metodo nao encontrado.");
}
catch (InvocationTargetException e) {
System.out.println("Chamada de metodo incorreta.");
}
catch (IllegalAccessException e) {
System.out.println("Metodo inacessivel.");
}
catch (IllegalArgumentException e) {
System.out.println("Argumentos incorretos.");
}

return destino;
}
}