Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导URL路径变量编码_Java_Spring Boot_Rest_Urlencode - Fatal编程技术网

Java Spring引导URL路径变量编码

Java Spring引导URL路径变量编码,java,spring-boot,rest,urlencode,Java,Spring Boot,Rest,Urlencode,我有一个SpringBoot(v2.3.5.RELEASE)RESTAPI,似乎无法解决路径变量的编码问题。我已经尝试了在网上找到的每一个解决方案,但没有任何帮助。 以下是主要课程: @springboot应用程序 公共类重新应用程序{ 公共静态void main(字符串[]args){ run(RestApplication.class,args); } } RestController(将请求发送到该URL时从不执行该方法): @RestController @请求映射(“/mvn/pac

我有一个SpringBoot(v2.3.5.RELEASE)RESTAPI,似乎无法解决路径变量的编码问题。我已经尝试了在网上找到的每一个解决方案,但没有任何帮助。 以下是主要课程:

@springboot应用程序
公共类重新应用程序{
公共静态void main(字符串[]args){
run(RestApplication.class,args);
}
}
RestController(将请求发送到该URL时从不执行该方法):

@RestController
@请求映射(“/mvn/packages”)
公共类模块{
@自动连线
模块化服务;
@GetMapping(value=“/{pkg}/{pkg\u ver}/modules/{namespace}/metadata”,products=MediaType.APPLICATION\u JSON\u value)
ResponseEntity getModuleMetadata(@PathVariable(“pkg”)字符串包名称,
@PathVariable(“pkg_ver”)字符串包版本,
@PathVariable(“名称空间”)字符串模块(名称空间){
return service.getModuleMetadata(包名称、包版本、模块名称空间);
}
}
配置类:

@配置
公共类公司配置
{
@豆子
公共过滤器注册bean过滤器注册bean(){
FilterRegistrationBean registrationBean=新的FilterRegistrationBean();
CharacterEncodingFilter CharacterEncodingFilter=新的CharacterEncodingFilter();
characterEncodingFilter.setForceEncoding(true);
characterEncodingFilter.setEncoding(“UTF-8”);
setFilter(characterEncodingFilter);
返回注册bean;
}
}
application.properties

logging.level.org.springframework.web=DEBUG
server.port=8080
server.tomcat.uri-encoding=UTF-8
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
我甚至在
pom.xml
中的
springbootmaven插件中添加了编码:


org.springframework.boot
springbootmaven插件
2.3.6.1发布
重新应用
-Dfile.encoding=UTF8
但结果仍然是一样的。 向
http://localhost:8080/mvn/packages/junit:junit/4.12/%2Fjunit.framework%2FAssert
i、 e.
mvn/packages/{pkg}/{pkg_ver}/modules/{namespace}/metadata
namespace
编码后,返回
HTTP400-错误请求

但是,当我尝试
http://localhost:8080/mvn/packages/junit:junit/4.12/foo
(不需要编码/解码),它可以工作

我还尝试使用
ALLOW\u ENCODED\u SLASH
属性。主要类别:

@springboot应用程序
公共类重新应用程序{
公共静态void main(字符串[]args){
System.setProperty(“org.apache.tomcat.util.buf.udeconder.ALLOW_ENCODED_SLASH”,“true”);
run(RestApplication.class,args);
}
}
但在这种情况下,它无法将请求解析为该映射,并返回
404-notfound

2020-12-10 17:03:27.044 DEBUG 105120 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : GET "/mvn/packages/junit:junit/4.12/%2Fjunit.framework%2FAssert", parameters={}
2020-12-10 17:03:27.053 DEBUG 105120 --- [nio-8080-exec-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ResourceHttpRequestHandler ["classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "/"]
2020-12-10 17:03:27.056 DEBUG 105120 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler     : Resource not found
2020-12-10 17:03:27.056 DEBUG 105120 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND
2020-12-10 17:03:27.060 DEBUG 105120 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : "ERROR" dispatch for GET "/error", parameters={}
2020-12-10 17:03:27.062 DEBUG 105120 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)
2020-12-10 17:03:27.083 DEBUG 105120 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, text/html;q=0.8]
2020-12-10 17:03:27.087 DEBUG 105120 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Exiting from "ERROR" dispatch, status 404

有人能帮我吗?

可能重复:是的,我已经试过了那篇文章中的解决方案。它还建议了一种变通方法,但我更喜欢一种解决方案,而不是变通方法。如果确实没有解决方案,那么就必须进行一个解决方案。看看这个问题:考虑使用通配符,如第一个应答器中所描述的,我看到其他人使用通配符和匹配URL本身,但是,我有很多这样的URL,使用通配符然后匹配所有的通配符并不是一个切实可行的解决方案。可能的重复:是的,我已经在那篇文章中尝试了这个解决方案。它还建议了一种变通方法,但我更喜欢一种解决方案,而不是变通方法。如果确实没有解决方案,那么就必须进行一个解决方案。看看这个问题:考虑使用通配符,如第一个应答器中所描述的,我看到其他人使用通配符和匹配URL本身,但是,我有很多这样的URL,使用通配符然后匹配所有的通配符并不是一个切实可行的解决方案。