Редактировать: Я был в замешательстве - использовал cxf, а не трикотаж. Есть ли способ конвертировать аннотированный объект в json, который похож на ObjectMapper от Jackson?Как точно соответствовать json-выходу из cxf?
оригинальный тзд:
Привет, настоящее время мы используем 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?
Спасибо! joe
Я сомневаюсь, что вы это заработаете. Джерси и Джексон работают совсем по-другому и производят разные стили JSON. Вам будет лучше использовать Джерси, чтобы программно создать ваш JSON. – skaffman
К сожалению, я был немного смущен. Оказывается, использовали cxf, а не трикотаж. :( –
Вы когда-нибудь находили решение этой проблемы? –