我正在运行一个Spring Boot MVC应用程序,在我的控制器中,我有一个@RequestParamter,其值为“ status”。当我通过RequestMapping(例如http://localhost:8080/pathToMethod?status=someStatus&otherParam=aThing&status=anotherStatus)使用此方法时
@RequestMapping(method = RequestMethod.GET, value ="pathToMethod")
public responseType methodName(
@RequestParam(value = "otherParam", required = false) List<String> param,
@RequestParam(value = "status", required = false) List<String> status,
HttpServletRequest request, HttpServletResponse response){
//code here
}
它失败并出现以下错误:
字段“状态”上的对象“ modelAndView”中的字段错误:拒绝的值 [东西];码 [typeMismatch.modelAndView.status,typeMismatch.status,typeMismatch.org.springframework.http.HttpStatus,typeMismatch]; 论点 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[modelAndView.status,status];参数[];预设讯息 [状态]];默认消息[无法转换类型的属性值 [java.lang.String]为必需的类型 [org.springframework.http.HttpStatus]用于属性“状态”;嵌套的 例外是 org.springframework.core.convert.ConversionFailedException:失败 从类型[java.lang.String]转换为类型 [org.springframework.http.HttpStatus]的值为“ Soemthing”;嵌套的 异常是java.lang.IllegalArgumentException:没有枚举常量 org.springframework.http.HttpStatus.Soemthing]
是否有任何方法可以绕过Springs对“状态”参数的默认处理,以使其不会自动尝试将其转换为HttpResponse?
答案 0 :(得分:1)
之所以会这样,是因为您接受请求参数作为列表,但仅传递字符串。
检查以下可能的原因。
1。删除List<String>
并将其设置为String
2。使用其他任何名称代替status
作为请求参数,因为status
是org.springframework.http.HttpStatus
的默认关键字
答案 1 :(得分:-1)
在Spring 4和Java 8中,可以使用Optional来具有可选的路径变量。
代码:
@RequestMapping(value = {"/path", "/path/{status}")
public String getResource(@PathVariable Optional<String> status) {
if (status.isPresent()) {
return service.processResource(status.get());
} else {
return service.processResource();
}
}