2016-09-18 138 views
0

這可能是一個愚蠢的問題,但我無法自己想出一個可能的解決方案。 基本上我試圖用Spring MVC和Yahoo Finance API創建一個簡單的Java Web應用程序。 我的目標是創建一個簡單的表格,我將能夠插入一個特定股票的符號(例如:INTC(英特爾公司)),並得到它的「紅利」,「價格」,「報價」等使用Spring MVC與Yahoo Finance API「找不到默認構造函數」

我addStock.jsp:

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

AddStock.java的部分:

@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​​的正確方式,甚至如果它是「合法的」。 我想創建一個新的java類,它將擴展來自Yahoo Finance API的類,但它不允許添加一個空的構造函數。

我知道我的問題是更多的「java知識」,但如果有人可以幫助我將是巨大的。我希望我已經解釋了我的問題。乾杯

回答

1

這也是爲什麼它的解耦你的數據傳輸對象(DTO的),您可以使用您的外部API,從後端的數據模型是一個好主意的例子。而不是試圖將雅虎Stock類一直推到您的用戶界面,創建一個新的AddStockForm,只有在這裏交互所需的屬性。

如果您以後想從Yahoo轉換到Google Finance,該怎麼辦?如果你的用戶界面是用特定的內部API來表示的,那麼你需要做很多額外的工作。相反,如果您將前端和後端分離,則可以根據需要獨立進行更改。

相關問題