Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 如何在SpringRESTful应用程序中正确配置@PathVariable参数?_Java_Regex_Spring_Rest - Fatal编程技术网

Java 如何在SpringRESTful应用程序中正确配置@PathVariable参数?

Java 如何在SpringRESTful应用程序中正确配置@PathVariable参数?,java,regex,spring,rest,Java,Regex,Spring,Rest,我正在开发一个SpringRESTful应用程序,它有MVC架构。这三层是:dao、服务和控制器。控制器层(包)负责提供带有各自URL的JSON数据。控制器包中的以下方法可以工作,但会中断某些输入值 @RequestMapping(value = "/category/{category}", method = RequestMethod.GET) public @ResponseBody ResponseEntity<String> getGivenCategory(@PathV

我正在开发一个SpringRESTful应用程序,它有MVC架构。这三层是:dao、服务和控制器。控制器层(包)负责提供带有各自URL的JSON数据。控制器包中的以下方法可以工作,但会中断某些输入值

@RequestMapping(value = "/category/{category}", method =  RequestMethod.GET)
public @ResponseBody ResponseEntity<String> getGivenCategory(@PathVariable String category){

    HttpHeaders ResultHeader = new HttpHeaders();
    ResultHeader.set("Access-Control-Allow-Origin", "*");
    ResultHeader.set("Content-Type", "application/json");
    String result = productsService.getGivenCategory(category);  

    if(null ==  result){

        return new ResponseEntity<String>( "{}", ResultHeader, HttpStatus.EXPECTATION_FAILED);
     }
     return new ResponseEntity<String>(result, ResultHeader, HttpStatus.OK); 
 }

但是,对于某些字符串,URL会出现故障,例如“胶合板-打磨/抛光”。我假设使用某些正则表达式可以解决这个问题,但是,在这种情况下,我的知识非常有限。有什么建议可以改进代码吗?

您需要将CharacterEncodingFilter添加到web.xml中

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

字符编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
字符编码滤波器
/*

这听起来像是一种逃避,但您能否尝试不使用会破坏框架的路径字符串?请看一篇有这种想法的文章,“胶合板-砂光/成品”的URL是什么?您是否对
/
字符进行了编码?没有,我还认为/character会出现问题。我如何编码/?
胶合板%20-%20和%2Finished
编码的URL是否与此相关?好的,但是,如何使用我提到的方法?
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>