gpt4 book ai didi

java - 如何使用 JAXB 将 Properties 对象转换为 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 03:38:07 25 4
gpt4 key购买 nike

我想在 REST 应用程序中接受和响应 JSON 对象。我需要发送和接收的数据位于 .properties 文件中。我已经阅读了它们,并且现在位于 Properties 对象中(来自 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 。 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>
<小时/>

使用 Jersey 2.x,情况稍微简单一些。我们只需要这个提供商

<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.0</version>
</dependency>

并注册相同的JacksonJaxbJsonProvider(虽然包不同,但类名相同)。不需要 Pojo 映射功能。

<小时/>

注意:在这两种情况下,都有两个 Jackson 提供程序,一个 JacksonJsonProvider 和一个 JacksonJaxbJsonProvider。如果您希望 pojo 的编码依赖于 JAXB 注释,那么您应该注册后者。

关于java - 如何使用 JAXB 将 Properties 对象转换为 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com