我实现了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

10-06 12:56