如何消除spring 引导中bean 的重复性能?

How to eliminate a repeat performance of bean in spring boot?

大家好,有一个问题,我的 bean 被执行了两次,我不明白为什么。我是 spring 引导的新手,恐怕这是关于误用注释的问题。

package com.Alfa.controllers;


import com.Alfa.tools.JsonParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.io.FileNotFoundException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;

@SpringBootApplication
@Controller
public class MainController {
    private final RankClient rank;
    private final GifClient gifClient;

    @Autowired
    public MainController(RankClient rank, GifClient gifClient) {
        this.rank = rank;
        this.gifClient = gifClient;
    }

    @GetMapping("/{currency}")
    public String getGif(@PathVariable String currency, Model model) {
        JsonParser jsonParser=new JsonParser();
        System.out.println(currency);
        boolean res = jsonParser.isRankHigherToday(rank.getYesterdayJson(getYesterdayDate(), currency).getBody(), rank.getJson(currency).getBody());
        Map gif;
        if (res == false) gif = gifClient.getBrokeGif().getBody();
        else gif = gifClient.getRichGif().getBody();
        gif = (Map) gif.get("data");
        gif = (Map) gif.get("images");
        gif = (Map) gif.get("downsized_large");
        String GifSrc = (String) gif.get("url");
        model.addAttribute("src", GifSrc);
        return "index";

    }

    private String getYesterdayDate() {
        final Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return dateFormat.format(cal.getTime());
    }


}

@FeignClient(name = "RankClient", url = "${feign.client.rank.url}")
interface RankClient {
    @RequestMapping(method = RequestMethod.GET, value = "${feign.client.rank.json.latest}"+"${feign.client.rank.token}&base={currency}")
    ResponseEntity<Map> getJson(@PathVariable("currency") String currency);

    @RequestMapping(method = RequestMethod.GET, value = "${feign.client.rank.json.historical}" +
            "{date}" + "${feign.client.rank.json.historical.end}" + "${feign.client.rank.token}&base={currency}")
    ResponseEntity<Map> getYesterdayJson(@PathVariable("date") String date, @PathVariable("currency") String currency);
}

@FeignClient(name = "GifClient", url = "${feign.client.gif.url}")
interface GifClient {
    @RequestMapping(method = RequestMethod.GET, value = "${feign.client.gif.token}" + "${feign.client.gif.tag.broke}")
    ResponseEntity<Map> getBrokeGif();

    @RequestMapping(method = RequestMethod.GET, value = "${feign.client.gif.token}" + "${feign.client.gif.tag.rich}")
    ResponseEntity<Map> getRichGif();
}

System.out.println(currency); 在我的例子中 returns 有两个值,第一个是我需要的,然后是 returns favicon。图标。 我不知道 favicon.ico 来自哪里,想了解我做错了什么。

Web 浏览器将向 /favicon.ico 发出请求,以检索用于在选项卡、书签列表等中代表您的网站的图标。我怀疑这就是这里发生的情况。

您可以通过更改 URI 来避免此问题,这样您的 @GetMapping 就不会匹配 / 下面的任何内容。例如,您可以使用类似 currencies/{currency}.

的内容

或者,如果您想要或需要使用 /{currency},您可以验证 currency 是已知的货币代码,如果不是,则 return 是 404。一些输入验证通常是个好主意,因此无论该方法映射到什么 URI,都可能值得进行更改。