Редактировать: я был смущен - использовал cxf, а не майку. Есть ли способ конвертировать аннотированный объект в json, который похож на ObjectMapper Джексона?
исходное сообщение:
Привет,
В настоящее время мы используем jaxrs для преобразования наших веб-ответов в xml / json. Однако сейчас я хотел бы создать эквивалентную строку json внутри моего кода, используя ObjectMapper (?).
Например, учитывая контроллер и jaxb-аннотированный возвращаемый объект:
@Path("/foo")
@Produces({"application/json", "application/xml"})
public class FooController {
@GET
@Path("/some_action")
public TopDTO someAction(@QueryParam("arg") String arg) {
...
}
}
@XmlRootElement(name="topDTO")
@XmlAccessorType(XmlAccessType.NONE)
public class TopDTO {
...
@XmlAttribute(name="attr")
public String getAttr() {
return "blah";
}
@XmlElement(name="innerDTO")
public InnerDTO getInnerDTO() {
...
}
}
@XmlRootElement(name="innerDTO")
@XmlAccessorType(XmlAccessType.NONE)
public class InnerDTO {
...
}
Удар http://myserver/.../foo.json выпускает какой-то симпатичный JSON:
{"topDTO":{"@attr":"blah","innerDTO":...}}
Теперь я хотел бы иметь возможность генерировать этот точный JSON внутри:
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.ALWAYS);
mapper.getSerializationConfig().set(SerializationConfig.Feature.AUTO_DETECT_FIELDS, false);
mapper.getSerializationConfig().set(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
return mapper.writeValueAsString(snapshotDTO);
Однако это, похоже, не работает вообще; большинство аннотированных атрибутов и элементов отсутствуют, к атрибутам не добавляется префикс «@», как при выводе jaxrs и т. д.
Я что-то упустил? Как jaxrs сам конвертирует аннотированный объект в строку json?
Спасибо!
джо