boa noite caros amigos de código.
Estou estudando mongodb com java e resolvi junto fazer uma serialização automática com jaxb e surgiu um dilema que nuca precisei fazer antes e gostaria de saber se algum de vcs saberia me ajudar.
criei um atributo id que fica o “_id” das collections do mongodb, quem ja usou mongodb com java sabe que tem uma classe especifica para ele, essa serialização eu uso quando vou responder um ws em json e gostaria de personalizar esse atributo para exibir o toString desse objeto, pois atualmente ele retorna isso no ws(para o atributo id)
"id": {
"timestamp": 1537680278,
"machineIdentifier": 452672,
"processIdentifier": -19764,
"counter": 8957248,
"time": 1537680278000,
"date": 1537680278000,
"timeSecond": 1537680278
}
ta meio estranho, sem contar que quando vamos fazer um “find()” na collection do mongodb, usamos o toString desse objeto.
alguém poderia me ajudar???
Mas você está lendo o JSON do MongoDB e já serializando em XML?
estou serializando em json com jaxb
Alguma razão específica para usar algo tão complexo? Não é mais fácil usar algo como o Gson ou Jackson mesmo?
bom, estou fazendo pra estudar, queria que quem consumisse a api possa ter a resposta em json o xml se ela preferir
Suponho que esteja implementando RESTful, certo?
Se é isso, você define qual o tipo de retorno no controller.
exatamente isso, porem eu quero personalizad o id, para que retorne no json ou xml o metodo “toString” no lugar de colocar toda a estrutura do atributo “id”.
o atributo “id” no caso é do tipo “ObjectId”, objeto compativel com o campo “_id” das collections do mongodb.
quero que no json envie o toString
o retorno eu defini como json e xml, o que eu quero é personalizar a saida de um atributo na saida o ws
vou colocar aqui a solução, funcionou perfeitamente.
até pq alguém pode precisar dessa informação um dia.
Adapter:
import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.bson.types.ObjectId;
public class ObjectIdAdapter extends XmlAdapter<String, ObjectId>{
@Override
public String marshal(ObjectId objectId) throws Exception {
return objectId.toHexString();
}
@Override
public ObjectId unmarshal(String id) throws Exception {
return new ObjectId(id);
}
}
Pojo:
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
import org.bson.types.ObjectId;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Cliente{
@XmlJavaTypeAdapter(ObjectIdAdapter.class)
private ObjectId id;
private String nome;
private String cpf;
private String rg;
//metodos…
}
resultado:
{
“id”: “5bac3f5878436d04f0d7dbbf”,
“nome”: “Aala”,
“cpf” : “xxx.xxx.xxx-xx”,
“rg” : “xx.xxx.xxx-x”
}