0

サーバーからの 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 を返すと、正常に動作します。

これが機能するための設定がありませんか?

ありがとう!

4

1 に答える 1

0

jacksonに休止状態モジュールを使用することをお勧めします。これにより、休止状態の初期化されていないオブジェクトを無視するのに役立ちます。この方法では、例外は発生せず、完全に初期化された変換のみが行われます。

于 2012-11-08T10:58:22.780 に答える