2016-09-18 7 views
0

これはおそらくばかげた質問ですが、私自身は解決策を見つけられません。 基本的に私は、Spring MVCとYahoo Finance APIを使用して簡単なJava Webアプリケーションを作成しようとしています。 私の目標は、特定の株式(例:INTC(intel corporation))のシンボルを挿入し、その「配当」、「価格」、「見積もり」などを得ることができるシンプルなフォームを作成することでした。Yahoo Finance APIでSpring MVCを使用している "デフォルトコンストラクタが見つかりませんでした"

マイaddStock.jsp:AddStock.javaの

<form:form method="POST" modelAttribute="stock"> 
    <label>Symbol:</label> 
    <form:input path="symbol" /> 
    <input type="submit" /> 
</form:form> 

パート:

@RequestMapping(method = RequestMethod.GET, params="new") 
public String createForm(Model model) { 
    Stock stock = new Stock(); 
    model.addAttribute("stock", stock); 
    return "addStock"; 
} 

@RequestMapping(method = RequestMethod.POST) 
public String add(Stock stock, BindingResult result, Model model) throws IOException { 
    String name = ""; 
    BigDecimal price = new BigDecimal("0.00"); 
    BigDecimal change = new BigDecimal("0.00"); 
    BigDecimal peg = new BigDecimal("0.00"); 
    BigDecimal dividend = new BigDecimal("0.00"); 
    BigDecimal bookValuePerShare = new BigDecimal("0.00"); 
    if(!result.hasErrors()){ 
     yahooFinService.addStock(stock); 
     if (YahooFinance.get(stock.getSymbol()).getQuote().getPrice() != null) { 
      symbol = stock.getSymbol(); 
      name = YahooFinance.get(stock.getSymbol()).getName(); 
      price = YahooFinance.get(stock.getSymbol()).getQuote().getPrice(); 
      change = YahooFinance.get(stock.getSymbol()).getQuote().getChangeInPercent(); 
      peg = YahooFinance.get(stock.getSymbol()).getStats().getPeg(); 
      dividend = YahooFinance.get(stock.getSymbol()).getDividend().getAnnualYieldPercent(); 
      bookValuePerShare = YahooFinance.get(stock.getSymbol()).getStats().getBookValuePerShare(); 
     } 
     model.addAttribute("symbol", symbol); 
     model.addAttribute("name", name); 
     model.addAttribute("price", price); 
     model.addAttribute("change", change); 
     model.addAttribute("peg", peg); 
     model.addAttribute("dividend", dividend); 
     model.addAttribute("bookValuePerShare", bookValuePerShare); 

     YahooFinance.get(stock.getSymbol()).print(); 
    } 
    return "result"; 
} 

私の "問題" 私は空のコンストラクタ "株式" を作成するときに来ます。 ヤフーファイナンスはちょうど空のコンストラクタを提供しませんが:

public Stock(String symbol) { 
    this.symbol = symbol; 
} 

は、私が何をすべき?もちろん、新しいBeanを作成し、APIからコード全体をコピーし、空のコンストラクタを追加して(私が提供したコードを)インポートすると、すべてが正しく機能していますが、APIを使用する正しい方法とは思えません。それが "合法"であれば。 私はYahoo Finance APIからクラスを拡張する新しいJavaクラスを作成しようと考えましたが、空のコンストラクタも追加することはできません。

私の問題は「java knowledge」に関するものですが、もし誰かが私が助けてくれれば助かります。私は私の問題を適切に説明したことを願っています。乾杯。

答えて

1

これは、外部APIに使用するデータ転送オブジェクト(DTO)をバックエンドデータモデルから切り離すことをお勧めします。 Yahoo StockクラスをUIに押し込むのではなく、ここでの対話に必要なプロパティを持つ新しいAddStockFormを作成します。

後でYahooからGoogle Financeに切り替えるにはどうすればよいですか? UIが特定の内部APIの観点から表現されている場合は、余分な作業が必要です。代わりに、フロントエンドとバックエンドを分離する場合は、適切に独立して変更することができます。

関連する問題