我有以下电话:
http://localhost:8080/report?name=HelloReport&download=true
如何在http请求末尾附加任意输入参数?
我的代码:
...
@RequestMapping(value = "/report", params = {"name", "download"})
public ResponseEntity<byte[]> report(
@RequestParam(value = "name") String name,
@RequestParam(value = "download") boolean download) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/pdf"));
if (download) {
headers.setContentDispositionFormData("inline", name + ".pdf");
}
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
//MultiValueMap<String, String> parameters = UriComponentsBuilder.fromUriString(request.getRequestURI()).build().getQueryParams();
...
我想使用:
MultiValueMap<String, String> parameters = UriComponentsBuilder.fromUriString(request.getRequestURI()).build().getQueryParams();
新的 http 是什么样子的?
新的@RequestMapping和report()方法是什么样的?
最佳答案
您的 Spring 注释不允许任意查询参数。它可能会根据端点所需的缺少参数来限制对端点的访问。但不会限制额外端点对端点的访问。
基于该方法,现在我可以使用此查询 /report?name=test&download=false&myfoobar=21243hjof&blablablaba=beepboopbap
访问它。 Spring不关心我添加的myfoobar
和blablablaba
.
要访问所有内容,只需添加 HttpServletRequest
方法签名的参数,顺序并不重要
@RequestMapping(value = "/report", params = {"name", "download"})
public ResponseEntity<byte[]> report(
HttpServletRequest request,
@RequestParam(value = "name") String name,
@RequestParam(value = "download") boolean download) {
然后只需使用即可获取所有参数
request.getQueryString() // everything after ?, so its name=test&download=false&myfoobar=21243hjof&blablablaba=beepboopbap
或者您可以使用请求方法:
request.getParameter("myfoobar") // 21243hjof
或者对于你的例子,你可以这样做
MultiValueMap<String, String> parameters = UriComponentsBuilder.fromUriString("?"+request.getQueryString()).build().getQueryParams();
<小时/>
您也可以使用@RequestParam Map<String,String> allRequestParams
获取所有参数。
@RequestMapping(value = "/report", params = {"name", "download"})
public ResponseEntity<byte[]> report(
@RequestParam Map<String,String> allRequestParams,
@RequestParam(value = "name") String name,
@RequestParam(value = "download") boolean download) {
关于java - 使用 RequestMapping 和 fromUriString 从浏览器进行 http 调用中的任意输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47100693/