1
我想知道爲什麼MOXY不提供類似於JACKSON的JSONProvider類來替換jax-rs實現中的默認JSON提供者?將CXF的JSONProvider(基於Jettison)替換爲MOXy的最佳方式是什麼?
這將是處理某個包中所有類的最簡單方法。 我最終做的是做以下事情,因爲我覺得自定義上下文解析器或MessageBodyWriter/Reader大多適合處理某些類,但不處理包中的所有類,特別是如果您有多個類時。
我對不對? 你有什麼想法? 用CXF中的MOXY替換Jettison以處理包中的所有類的最佳方法是什麼?
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.apache.cxf.jaxrs.provider.json.JSONProvider;
import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
public class MyJSONProvider<T> extends JSONProvider<T> {
private static JAXBContext jaxbContext = null;
static {
try {
jaxbContext = JAXBContextFactory.createContext("com.bp.bs", null);
} catch (JAXBException jaxbe) {
jaxbe.printStackTrace();
throw new ExceptionInInitializerError(jaxbe);
}
}
@Override
public void writeTo(T obj, Class<?> cls, Type genericType,
Annotation[] anns, MediaType m,
MultivaluedMap<String, Object> headers, OutputStream os)
throws IOException, WebApplicationException {
Marshaller marshaller = null;
try {
marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE,
"application/json");
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
marshaller.marshal(obj, os);
} catch (JAXBException jaxbe) {
jaxbe.printStackTrace();
}
}
}
感謝üSO這和我一直在尋找的一樣!我結束了以下的春季配置: \t \t \t \t <屬性名= 「formattedOutput」 值= 「真」/> \t \t <屬性名= 「includeRoot」 值= 「真」/> \t \t <屬性名= 「marshalEmptyCollections」 值= 「假」/ > \t \t <屬性名= 「valueWrapper」 值= 「$」/> \t \t <屬性名= 「namespaceSeparator」 值= 「」/> \t \t \t ' –