如何使用JAXB将属性对象转换为JSON对象

我想在REST应用程序中接受和响应JSON对象。我需要发送和接收的数据在.properties文件中。我已经阅读了它们,现在位于PropertiesObject(From

java.util.Properties)中。是否可以在Properties不实现新类的情况下编组和解组对象?

我在Weblogic服务器中使用Jax-rs API。

@POST

@Path("{id}")

@Produces(MediaType.APPLICATION_JSON)

@Consumes(MediaType.APPLICATION_JSON)

public JSONObject getbyID(@PathParam("id")JSONObject inputJsonObj) {

//marshalling and unmarshalling goes here

}

回答:

对WebLogic不太熟悉,因此我不知道它使用的是哪个版本的Jersey(1.x或2.x),但是使用1.x,您可以简单地添加此依赖项

<dependency>

<groupId>com.sun.jersey</groupId>

<artifactId>jersey-json</artifactId>

<version>${jersey-version}</version>

</dependency>

这将取决于杰克逊。Jackson已经反序列化该Properties对象并将其序列化为JSON对象。

这是一个简单的测试

资源资源

@Path("/properties")

public class PropertiesResource {

@GET

@Produces(MediaType.APPLICATION_JSON)

public Response getProperties() throws Exception {

FileInputStream fis = new FileInputStream("test.properties");

Properties props = new Properties();

props.load(fis);

return Response.ok(props).build();

}

@POST

@Consumes(MediaType.APPLICATION_JSON)

public Response postProperties(Properties properties) {

StringBuilder builder = new StringBuilder();

for (String key: properties.stringPropertyNames()) {

builder.append(key).append("=")

.append(properties.getProperty(key)).append("\n");

}

return Response.created(null).entity(builder.toString()).build();

}

}

测试

public void testMyResource() throws Exception {

ClientConfig config = new DefaultClientConfig();

config.getClasses().add(JacksonJsonProvider.class);

config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,

Boolean.TRUE);

Client c = Client.create(config);

WebResource resource = c.resource(Main.BASE_URI).path("properties");

String json = resource.accept("application/json").get(String.class);

System.out.println(json);

FileInputStream fis = new FileInputStream("test.properties");

Properties props = new Properties();

props.load(fis);

String postResponse

= resource.type("application/json").post(String.class, props);

System.out.println(postResponse);

}

结果:

// from get

{"prop3":"value3","prop2":"value2","prop1":"value1"}

// from post

prop3=value3

prop2=value2

prop1=value1

对于配置,您只需要配置POJOMapping功能并注册Jackson提供程序

程式化

public class JerseyApplication extends ResourceConfig {

public JerseyApplication() {

packages(...);

getProviderClasses().add(JacksonJsonProvider.class);

getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);

}

}

web.xml

<init-param>

<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>

<param-value>true</param-value>

</init-param>


,它会更简单一些。我们只需要这个提供者

<dependency>

<groupId>com.fasterxml.jackson.jaxrs</groupId>

<artifactId>jackson-jaxrs-json-provider</artifactId>

<version>2.4.0</version>

</dependency>

并注册相同的JacksonJaxbJsonProvider(尽管不同的包,类名是相同的)。不需要Pojo映射功能。


在两种情况下,都有两个Jackson提供程序,a JacksonJsonProvider和a

JacksonJaxbJsonProvider。如果希望pojos的编组依赖于JAXB批注,则应注册后者。

以上是 如何使用JAXB将属性对象转换为JSON对象 的全部内容, 来源链接: utcz.com/qa/406410.html

回到顶部