1

Carクラスのリストを含むPersonクラスで構成される単純なWebサービスを作成しました。

人物クラス:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Person {
       private String lastName;
       private String firstName;    
       private List<Car> cars;

     // Getters & Setters 
}

車のクラス:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Car {
       private String year;
       private String make;
       private String model;

       // Getters & Setters
}

問い合わせを保存するために別のオブジェクトを作成しました。

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class ResponseOutput {

       private String year;
       private String make;
       private String model;

       // Getter and Setters
}

これが私の実際のクライアント(ジャージーベースのRestful Webサービス)です:

@Path("")
public class MyWebService {
       @GET
       @Path("showPerson")
       @Produces(MediaType.APPLICATION_JSON)
       public Person getPerson {
              Person person = new Person();
              person.setFirstName = "John";
              person.setLastName = "Doe";

              Car car1 = new Car();
              car1.setYear("2012");
              car1.setMake("Toyota");
              car1.setModel("Corolla");

              Car car2 = new Car();
              car2.setYear("2011");
              car2.setMake("Ford");
              car2.setModel("Focus");

              List<Car> cars = new ArrayList<Car>();
              cars.add(car1);
              cars.add(car2);

              person.setCars(cars);
              return person;
     }

     @GET
     @Path("{name}")
     @Produces(MediaType.APPLICATION_JSON) 
     public ResponseOutput getCar(@PathParam("name") String name) 
     {
            ResponseOutput output = new ResponseOutput();
            Person person = getPerson();

            List<Car> cars = person.getCars();

            for (Car car : cars) {
              if (name.equals(car.getMake())); {
                   System.out.println("\n\tcar.getMake(): " + "\n");
                   output.setMake(car.getMake());
              }         
            }
            return output;
     }
}

次のようにgetPerson()メソッドを呼び出すと:

curl -X GET http://localhost:8080/myapp/showPerson

このJSONオブジェクトを含む201を返します(これは私が欲しいものです):

{"cars":[{"make":"Toyota","model":"Corolla","year":"2012"},
{"make":"Ford","model":"Focus","year":"2011"}],"firstName":"John","lastName":"Doe"}

ただし、次のようにgetCar method()を呼び出すと次のようになります。

curl -X GET http://localhost:8080/myapp/toyota

次のJSONオブジェクトを取得します(ArrayListの2番目の項目が追加されています!):

{ "make":"Ford", "model":"null", "year":"null" }

フォードではなくトヨタにしたかった。

あなたが言うことができるなら、私はcar.getMake()文字列の値を出力し、コンソール/シェルの中に、それは次のように言います:

car.getMake(): Toyota

car.getMake(): Ford

したがって、リストを繰り返し処理しているように見えますが、最後のアイテム(または次のアイテム)を追加していますか?

私はおそらく何が間違っているのですか?これをお読みいただきありがとうございます...

4

0 に答える 0