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
したがって、リストを繰り返し処理しているように見えますが、最後のアイテム(または次のアイテム)を追加していますか?
私はおそらく何が間違っているのですか?これをお読みいただきありがとうございます...