Spring @RequestParam,值/名称为“状态”

时间:2018-07-10 12:06:31

标签: java spring

我正在运行一个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?

Link to similar issue

2 个答案:

答案 0 :(得分:1)

之所以会这样,是因为您接受请求参数作为列表,但仅传递字符串。

检查以下可能的原因。

1。删除List<String>并将其设置为String

2。使用其他任何名称代替status作为请求参数,因为statusorg.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();
  }
}