Boa Tarde Pessoal,
Eu tenho a seguinte estrutura de classe:
[code]@MappedSuperclass
public class Persistivel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
// Getters & Setters
}[/code]
[code]@Entity
@Table(name=“tipo_ganho”, schema=“public”)
public class TipoGanho extends Persistivel implements Jsonable {
@Column(length=100)
private String nome;
// Getters & Setters
}[/code]
[code]@Entity
@Table(name=“controle_ganho”, schema=“public”)
public class ControleGanho extends Persistivel implements Jsonable {
@Column(name="valor", precision=2)
private Double valor;
@Column(name="data", nullable=false)
@Temporal(TemporalType.DATE)
private Date data;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_tipo_ganho")
private TipoGanho tipoGanho;
// Getters & Setters
}[/code]
Converter:[code]@Convert(Jsonable.class)
@ApplicationScoped
public class JsonableConverter implements Converter<Jsonable>{
public Jsonable convert(String value, Class<? extends Jsonable> type, ResourceBundle bundle) {
if (Strings.isNullOrEmpty(value)) {
return null;
}
// Montando o json com o root "data"
String json = "{\"data\":"+ value +"}";
XStream xstream = new XStream(new JettisonMappedXmlDriver());
// Registrando os converters
xstream.registerConverter(new LongConverter());
xstream.registerConverter(new DateConverter());
// Ajustando a estrutura do XML
xstream.alias("data", type);
// Convertendo o XML em Object
return (Jsonable) xstream.fromXML(json);
}
}[/code]
Controller:[code]
@Resource
public class GanhoController {
// …
@Post
@Path("/ganho/tipoGanho/insert.json")
@Restrito
@Transactional
public void tipoGanhoInsert(TipoGanho data) {
// ......
}
@Post
@Path("/ganho/controleGanho/insert.json")
@Restrito
@Transactional
public void controleGanhoInsert(ControleGanho data) {
// .......
}
// ...
}
[/code]
Com a estrutura acima está ocorrendo o seguinte:
Quando o ExtJS envia para a controller o json para inserir um TipoGanho:Parâmetrosapplication/x-www-form-urlencoded
data {"id":"","nome":"Tipo de Ganho Teste"}
dir ASC
limit limit
sort id
start start
total total
O Converter cria o objeto certinho… e o insert é realizado com sucesso.
Quando o ExtJS envia para a controller o json para inserir um ControleGanho:Parâmetrosapplication/x-www-form-urlencoded
data {"id":"","valor":1,"data":"2011-10-01T00:00:00","tipoGanho":6}
dir ASC
limit limit
sort data
start start
total total
Ele não está conseguindo criar o Objeto TipoGanho para alimentar o atributo do ControleGanho.
Já li muitos Posts com problemas relacionados, mas são todos Posts antigos… .2009, 2010 e de lá para cá o VRaptor já mudou bastante na questão de Serialização/Deserialização de Jsons.
E portanto gostaria de ajuda para saber como faço p/ que no segundo caso, eu consiga alimentar o atributo tipoGanho da Entity ControleGanho.
Vlw pessoal.