Tenho uma classe que possui atributos que é do tipo da API Joda Time.
Tenho LocalTime e DateTme. Uso Hibernate Converter do Joda para Gravar no banco.
Mas quando tento listar os registros, eu recebo via getJSON, vem somente os registros que nao sao do tipo do Joda. Simplesmente os registro nao aparecem no JSON.
[quote=Lucas Cavalcanti]o vraptor só serializa por padrão os primitivos (numeros, string, date e calendar)… se vc quer serializar outros tipos de campos, vc precisa fazer:
result.use(json())....include("nomeDoCampo").serialize();
ou
result.use(json())....recursive().serialize();
mesmo assim pode ser que ele não imprima as datas do jodatime do jeito que vc quer… daí vc precisa criar um converter parecido com esse:
talvez vc tenha que implementar um converter para os tipos do joda time (é bem fácil, implemente SingleValueConverter)
[/quote]
Valeu xará, usei o SingleValueConverter dando somente um toString o tipo do Joda e está resolvido. Valeu!.
Só unica obesevação é que a classe que estou serializando possui 8 atributo relacionado à Data e Hora. O que tronou o código um pouco feio com monte de include. Isso é de menos.
[quote=Lucas Cavalcanti]o vraptor só serializa por padrão os primitivos (numeros, string, date e calendar)… se vc quer serializar outros tipos de campos, vc precisa fazer:
result.use(json())....include("nomeDoCampo").serialize();
ou
result.use(json())....recursive().serialize();
mesmo assim pode ser que ele não imprima as datas do jodatime do jeito que vc quer… daí vc precisa criar um converter parecido com esse:
talvez vc tenha que implementar um converter para os tipos do joda time (é bem fácil, implemente SingleValueConverter)
[/quote]
Lucas, como que eu uso esse SingleValueConverter, não estou conseguindo, de um exemplo ai… o nosso amigo Lucas Emanuel não postou a solução.
[quote=Lucas Cavalcanti]se vc está usando o VRaptor 3.4.0, crie as classes:
@Component
public class LocalDateConverter implements SingleValueConverter {
//implementação aqui
}
manda o toString e o fromString usarem o formato que vc quer usar.[/quote]
Obrigado lucas, deu certo agora, estou usando o VRaptor 3.3.x , fica o código ai par quem precisar:
A diferença é que estou usando o DateTime da JodaTime:
import javax.servlet.http.HttpServletResponse;
import org.joda.time.DateTime;
import br.com.caelum.vraptor.interceptor.TypeNameExtractor;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.serialization.ProxyInitializer;
import br.com.caelum.vraptor.serialization.xstream.XStreamJSONSerialization;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.SingleValueConverter;
@Component
public class DataConvert extends XStreamJSONSerialization {
public DataConvert(HttpServletResponse response,TypeNameExtractor extractor, ProxyInitializer initializer) {
super(response, extractor, initializer);
}
@Override
public XStream getXStream() {
XStream xstream = super.getXStream();
xstream.registerConverter(new SingleValueConverter() {
public String toString(Object value) {
DateTime d = new DateTime(value);
String data = d.toString("dd/MM/yy");
return data;
}
@SuppressWarnings("rawtypes")
public boolean canConvert(Class clazz) {
return DateTime.class.isAssignableFrom(clazz);
}
public Object fromString(String value) {
return null; //não é usado
}
});
return xstream;
}