Java 如何在SpringRESTful应用程序中正确配置@PathVariable参数?
我正在开发一个SpringRESTful应用程序,它有MVC架构。这三层是:dao、服务和控制器。控制器层(包)负责提供带有各自URL的JSON数据。控制器包中的以下方法可以工作,但会中断某些输入值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
@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>