2

SolrインスタンスからかなりJSON応答が返されます....

{"responseHeader":
  {"status":0,"QTime":1,"params":{"sort":"score asc","fl":"*,score",
    "q":"{! score=distance}","wt":"json","fq":"description:motor","rows":"1"}},
        "response":{"numFound":9,"start":0,"maxScore":6.8823843,"docs":
                  [{"workspaceId":2823,"state":"MN","address1":"1313 mockingbird Lane",
                    "address2":"","url":"http://mydomain.com/","city":"Minneapolis",
                    "country":"US","id":"399068","guid":"","geo":["45.540239, -98.580473"],
                    "last_modified":"2012-12-12T20:40:29Z","description":"ELEC MOTOR",
                    "postal_code":"55555","longitude":"-98.580473","latitude":"45.540239",
                    "identifier":"1021","_version_":1421216710751420417,"score":0.9288697}]}}

そして、それをJavaオブジェクトにマップしようとしています:

public class Item extends BaseModel implements Serializable {
    private static final long serialVersionUID = 1L;

    protected Integer workspaceId;
    protected String name;
    protected String description;
    protected String identifier;
    protected String identifierSort;
    protected Address address;
    protected String url;

        /** getters and setters eliminated for brevity **/
}

public class Address implements Serializable {
    private static final long serialVersionUID = 1L;

    protected String address1;
    protected String address2;
    protected String city;
    protected String state;
    protected String postalCode;
    protected String country;
            /** getters and setters eliminated for brevity **/
    }

address1、address2、city、state などを Item オブジェクトの Address オブジェクトにマップするにはどうすればよいですか? 私はジャクソンの注釈について読んでいますが、どこから始めればよいかについては何も思い浮かびません。

4

2 に答える 2

2

Jackson 1.9以降を使用している場合は、@JsonUnwrappedアノテーションを使用してこれを処理できます。

これを使用する例を次に示します(Jacksonのドキュメントから大幅に削除されています)。

public class Name {
   private String first, last;

   // Constructor, setters, getters
}

public class Parent {
   private int age;
   @JsonUnwrapped
   private Name name;

   // Constructor, setters, getters
}

public static void main(String[] args) {
   try {
      final ObjectMapper mapper = new ObjectMapper();
      final Parent parent = mapper.readValue(new File(
            "/path/to/json.txt"), Parent.class);
      System.out.println(parent);
   } catch (final Exception e) {
      e.printStackTrace();
   }
}
于 2012-12-13T20:20:03.837 に答える
2

最終的に Solrj を使用することになりました。

SolrJ に渡す独自の SolrResult オブジェクトを次のように記述しました。

List<SolrResult> solrResults = rsp.getBeans(SolrResult.class);

そして、複雑なオブジェクトまたはネストされたオブジェクトがある SolrResult.java では、最初に SolrJ アノテーションを使用してフィールドを取得し、必要に応じて値を設定しました...

@Field("address1")
public void setAddress1(String address1) {
    this.item.getAddress().setAddress1(address1);
}

少し面倒なだけで難しくはありませんでしたが、うまくいきます。

于 2012-12-20T07:14:52.580 に答える