以下は、実行している環境に基づいてこれを行うことができるいくつかの方法です。
スタンドアロンの例
標準の JAXB API を使用する場合、MOXy は JSON にマーシャリングするときにルート要素を含めます。この動作は、JAXBContextProperties.JSON_INCLUDE_ROOT
プロパティを使用して変更できます。false
の作成時にに設定されていた場合はJAXBContext
、 で に戻すことができtrue
ますMarshaller
。
import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.jaxb.MarshallerProperties;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>(2);
properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties);
Foo foo = new Foo();
foo.setBar("Hello World");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
marshaller.marshal(foo, System.out);
}
}
JAX-RSとMOXyJsonProvider
MOXy にはMessageBodyReader
/の実装が含まれているため、 MessageBodyWriter
MOXy を JSON バインディング プロバイダーとして簡単に構成できます。デフォルトMOXyJsonProvider
では、ルート要素を含めないように構成されています。Application
これは、以下のような JAX-RS クラスに構成済みのインスタンスを設定することで変更できます。
import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
public class FooApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>(1);
set.add(ExampleService.class);
return set;
}
@Override
public Set<Object> getSingletons() {
MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider();
moxyJsonProvider.setIncludeRoot(true);
HashSet<Object> set = new HashSet<Object>(1);
set.add(moxyJsonProvider);
return set;
}
}
詳細については
Jersey/GlassFish のデフォルトの JSON バインディング プロバイダーとしての MOXy
MOXy を Jersey/GlassFish のデフォルトの JSON バインディング プロバイダーとして使用している場合は、MoxyJsonConfig
次のようにクラスを利用できます。
import javax.ws.rs.ext.*;
import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
@Provider
public class MOXyJsonContextResolver implements ContextResolver<MoxyJsonConfig> {
private final MoxyJsonConfig config;
public MOXyJsonContextResolver() {
config = new MoxyJsonConfig()
.setIncludeRoot(true);
}
@Override
public MoxyJsonConfig getContext(Class<?> objectType) {
return config;
}
}
詳細については