2016-09-18 61 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来表示的,那么你需要做很多额外的工作。相反,如果您将前端和后端分离,则可以根据需要独立进行更改。

相关问题