我实现了api
https://theysaidso.com/api/#qod
使用春天休息模板。我的问题是,如果我使url像下面一样工作。但是,如果我从括号中删除参数名称,则不会,并返回错误。任何的想法?谢谢!
这有效:
QuoteResponse quoteResponse=
this.restTemplate.getForObject("http://quotes.rest/qod.json?category=
{param}", QuoteResponse.class, category);
这不是
QuoteResponse quoteResponse=
this.restTemplate.getForObject("http://quotes.rest/qod.json?category={}",
QuoteResponse.class, category);
我想这两者都会转换为以下值(采用价值传递作为对类别字符串的启发
"http://quotes.rest/qod.json?category=inspire"
更新(添加更多代码):控制器
@Autowired
QuoteService quoteService;
@RequestMapping(value="/ws/quote/daily", produces=MediaType.APPLICATION_JSON_VALUE,method=RequestMethod.GET)
public ResponseEntity<Quote> getDailyQuote(@RequestParam(required=false) String category){
Quote quote = quoteService.getDaily(category);
if(quote==null)
return new ResponseEntity<Quote>(HttpStatus.INTERNAL_SERVER_ERROR);
return new ResponseEntity<Quote>(quote,HttpStatus.OK);
}
QuoteService.getDaily
@Override
public Quote getDaily(String category){
if(category==null || category.isEmpty())
category=QuoteService.CATEGORY_INSPIRATIONAL;
QuoteResponse quoteResponse=
this.restTemplate.getForObject("http://quotes.rest/qod.json?category={cat}",
QuoteResponse.class, category);
return quoteResponse.getContents().getQuotes()[0];
}
最佳答案
this.restTemplate.getForObject("http://quotes.rest/qod.json?category=
{param}", QuoteResponse.class, category);
当您这样发出请求时,这意味着您要将PathVariable传递到Controller中,该变量由Controller参数中的
@PathVariable
批注处理。如果控制器上装有
@PathVariable
,则需要PathVariable才能完成工作。restTemplate.getForObject("http://quotes.rest/qod.json?category={}",
QuoteResponse.class, category);
当您发出这样的请求时,您的请求没有发送任何PathVariable,这在这里是必需的,因此不起作用并抛出MissingPathVariableException