Estou modelando alguns serviços utilizando VRaptor como controlador MVC.
Todas os resultados dos serviços serão JSON ou XML.
Eu modelei um objeto para ser trafegado para os retornos.
Basicamente seria algo assim:
Criei uma classe abstrata que já tem alguns métodos genéricos. Todos estes métodos tem uma ação default que seria informar se foi executado com sucesso ou com erro e uma mensagem.
Existem outros métodos que além destas duas mensagens ( status de execução e mensagem ), eles retornam também um objeto.
Por exemplo:
Um método de list, retorna um objeto do tipo List<?>.
Um método get, retorna um objeto complexo qualquer.
Então eu criei uma classe para ser meu retorno default:
class RequestResult implements Serializable {
private static final long serialVersionUID = 1282868667927366619L;
private ResultType type;
private String message;
private Object object;
public ResultType getType() {
return this.type;
}
public void setType(ResultType type) {
this.type = type;
}
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getObject() {
return this.object;
}
public void setObject(Object object) {
this.object = object;
}
}
então, hora eu seto somente o type ( SUCCESS ou ERROR ) e o message, hora eu seto além destes dois campos, o campo object com o objeto carregado pela classe de business ou então uma lista.
Na hora de renderizar a tela, só esta sendo carregado o type e a message. O objeto complexo não esta sendo adicionado ao XML ou JSON.
eu criei um método que executo depois de cada execução de métodos desta classe abstrata:
protected void afterExecution(ResultType result, String message, Object obj) throws ControllerException {
RequestResult rr = new RequestResult();
rr.setType(result);
rr.setMessage(message);
rr.setObject(obj);
if( this.returnType.equals(ReturnType.JSON) ) {
this.result.use(Results.json()).from(rr, "result").serialize();
} else if( this.returnType.equals(ReturnType.XML) ) {
this.result.use(Results.xml()).from(rr, "result").serialize();
} else {
throw new NullPointerException("Return type not found for Controller implementation");
}
}
Alguma sugestão do que devo fazer para resolver este problema??
[]'s