サーバーからの AJAX 応答を介して JSP のドロップダウン ボックスに入力するシナリオがあります。コントローラーでは、Product オブジェクトのコレクションを返し、戻り値の型に @ResponseBody の注釈を付けています。
コントローラ -
@RequestMapping(value="/getServicesForMarket", method = RequestMethod.GET)
public @ResponseBody Collection<Product> getServices(@RequestParam(value="marketId", required=true) int marketId) {
Collection<Product> products = marketService.getProducts(marketId);
return products;
}
そして製品は
@Entity
@Table(name = "PRODUCT")
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private Market market;
private Service service;
private int price;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "MARKET_ID")
public Market getMarket() {
return market;
}
public void setMarket(Market market) {
this.market = market;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "SERVICE_ID")
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
@Column(name = "PRICE")
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
サービスは
@Entity
@Table(name="SERVICE")
public class Service implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String description;
@Id
@GeneratedValue
@Column(name="ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="DESCRIPTION")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
JSP では、Product のサービス フィールドからもデータを取得する必要があります。だから私は私のJQueryコールバック関数で、product.service.descriptionのように書いてデータを取得しました。
デフォルトでは、Jackson は関連するサービス オブジェクト (またはその他のカスタム オブジェクト) をマッピングしていないようです。また、例外はありません。JSP では、データを取得できません。フィールドとして他のカスタム オブジェクトを含まないオブジェクトの Collection を返すと、正常に動作します。
これが機能するための設定がありませんか?
ありがとう!