繁体   English   中英

使用Spring MVC和Yahoo Finance API的“未找到默认构造函数”

[英]“No default constructor found” using Spring MVC with Yahoo Finance API

这可能是一个愚蠢的问题,但我自己也想不出一个可能的解决方案。 基本上,我试图使用Spring MVC和Yahoo Finance API创建一个简单的Java Web应用程序。 我的目标是创建一个简单的表单,在其中可以插入特定股票的代码(例如:INTC(英特尔公司))并获取其“股息”,“价格”,“报价”等。

我的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";
}

当我创建一个空的构造函数“ Stock”时,我的“问题”就来了。 Yahoo Finance不提供空的构造函数,而只是提供:

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

我该怎么办?? 当然,当我创建一个新的bean,从API复制整个代码,添加空的构造函数并导入(我提供的代码)时,一切工作正常,但是我认为这不是使用API​​的正确方法,甚至如果是“合法”。 我考虑过要创建一个新的Java类,该类将从Yahoo Finance API扩展这些类,但也不允许添加空的构造函数。

我知道我的问题更多是关于“ java知识”的,但是如果有人可以帮助我,那将是很好的。 我希望我已经正确解释了我的问题。 干杯

这是一个示例,说明为什么将用于外部API的数据传输对象(DTO)与后端数据模型脱钩是一个好主意的原因。 与其尝试将Yahoo Stock类一直推到用户界面, AddStockForm创建一个新的AddStockForm ,它具有此处交互所需的属性。

如果您以后想从Yahoo切换到Google财经怎么办? 如果您的UI是用特定的内部API表示的,那么您将需要进行很多额外的工作。 相反,如果您分离前端和后端,则可以适当地独立进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM