如何消除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,都可能值得进行更改。
大家好,有一个问题,我的 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,都可能值得进行更改。