0

CouchDB で動作する Java アプリがあります。そこから JSON を解析するには、lib: com.google.code.svenson v.1.3.8を使用し ますが、問題があります。JSON を受け取り、除外したいプロパティが 1 つあります。例:

{"groups":[], "norms":[], "unit":null, "_attachments":{
    "revision/1-b7c9e44edecb4c6509ce75d84d3aa06d":{
        "content_type":"application/json",
        "revpos":2,
        "digest":"md5-qPtWsDPF7vQANTQvQzmjrA==",
        "length":684,
        "stub":true
    }
}}

「_attachments」フィールドとすべてのインナーを除外する必要があります。しかし問題は、そのプロパティのリビジョンが動的であることです。それは常に変化します。そして、私のコードは機能しません:

public class TestDTO {

    private String attachment;
    private String revision;
    private String contentType;
    private String revpos;
    private String digest;
    private String length;
    private String stub;

    @JSONProperty(ignore = true, value = "_attachments")
    public void setAttachment(String attachment) {
        this.attachment = attachment;
    }

    public String getRevision() {
        return revision;
    }

    @JSONProperty(ignore = true, value = "revision/")
    public void setRevision(String revision) {
        this.revision = revision;
    }
//other get/set methods 
}
org.svenson.JSONParseException: Cannot set property revision/1-d009693fd000f179495cb3f9087109b6 on class java.lang.String
    at org.svenson.JSONParser.parseObjectInto(JSONParser.java:589)
    at org.svenson.JSONParser.parseObjectInto(JSONParser.java:617)
    at org.svenson.JSONParser.parse(JSONParser.java:396)
    at org.svenson.JSONParser.parse(JSONParser.java:341)
    at com.foo.core.api.services.bar.BarObjectParser.parseToObject(BarObjectParser.java:47)
    at com.foo.core.api.services.bar.task.ChangesProcessorTask.persistObject(ChangesProcessorTask.java:78)
    at com.foo.core.api.services.bar.task.ChangesProcessorTask.processChange(ChangesProcessorTask.java:65)
    at com.foo.core.api.services.bar.task.ChangesProcessorTask.processChanges(ChangesProcessorTask.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
    at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
    at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
4

1 に答える 1

0

はい、できます。必要なのは、List of Address をビジネス オブジェクトの一時プロパティとして宣言することだけです。

次に、次のコードを jsonConfig に追加します。

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreTransientFields(true);
于 2013-04-18T09:46:50.887 に答える