java - "No default constructor found"使用 Spring MVC 和雅虎财经 API

标签 java spring maven yahoo-finance

这可能是一个愚蠢的问题,但我自己无法找到可能的解决方案。 基本上我正在尝试使用 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”时,我的“问题”出现了。 雅虎财经不提供空的构造函数,而是:

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

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

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

最佳答案

这个示例说明了为什么最好将用于外部 API 的数据传输对象 (DTO) 与后端数据模型分离。不要尝试将 Yahoo Stock 类一直推送到您的 UI,而是创建一个新的 AddStockForm,其中仅包含此处交互所需的属性。

如果您以后想从 Yahoo 切换到 Google 财经该怎么办?如果您的 UI 用特定的内部 API 来表达,那么您需要做很多额外的工作。相反,如果您将前端和后端解耦,您可以根据需要独立进行更改。

关于java - "No default constructor found"使用 Spring MVC 和雅虎财经 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554380/

相关文章:

java - 从多项目 Maven 配置生成 WAR 文件

java - JSOUP 提取 href 标题

java - Java 运行时环境检测到 fatal error 。 EXCEPTION_ACCESS_VIOLATION 异常

java - Maven 在 Linux 上找不到编译器

java - 来自 pom.xml 的 Maven 解析器、Shrinkwrap

java - 当元素不区分大小写时,是否可以使用单个 Xpath 表达式扫描 xml 元素

java - 从嵌套集合中检索值

mysql - CloudFoundry MySQL Java 配置

Spring 将两个元素添加到 SOAP header

java - 如何使用 "java -cp example.jar com.example.MyMainClass"运行我的 Spring Boot 应用程序