当前位置: 首页 > 面试题库 >

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

呼延明朗
2023-03-14
问题内容

我想在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>

使用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提供程序,a JacksonJsonProvider和a
JacksonJaxbJsonProvider。如果希望pojos的编组依赖于JAXB批注,则应注册后者。



 类似资料:
  • 问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答

  • 问题内容: 假设我有json字串 现在我有一个班级用户 现在如何将上述json字符串转换为用户类对象 问题答案: 试试这个:

  • 问题内容: 我有一个列表,我需要使用GSON将其转换为JSON对象。我的JSON对象中包含JSON数组。 以下是我的代码,其中我需要将列表转换为其中具有JSON数组的JSON对象- 到目前为止,列表中只有两项-所以我需要这样的JSON对象- 做这个的最好方式是什么? 问题答案: 如果在您的方法中为,则应进行序列化。 这将为您提供所需的JSON输出。

  • 我有一个字符串(jsonData)通过Jackson对象映射器映射到json,如下所示,映射到JaxB。 我能够很好地映射到上面的字符串。然而,我在映射到jooq JSON对象时遇到了问题。我想我现在必须将jsonData转换为jooq JSON。 我该怎么做? 或者我必须创建某种包装? 由jooq配置的DTO

  • 我正试图将下面的json转换成java bean,需要你的帮助 Sort.json 我的豆子看起来像 我的测试课是 我看到的错误是 请建议:

  • 我想使用XML有效载荷,比如: 另一种有效载荷是: 所以我想为创建一个类,其中包含和一个,我可以在其中放置不同类型的对象,所以我尝试了多种类型的对象一个带有的类,但它不允许我具有相同的名称 在这种情况下我能做什么?提前感谢。