当前位置: 首页 > 知识库问答 >
问题:

无法将“status”作为HttpParameter传递给Spring Boot MVC应用程序

季城
2023-03-14

我运行一个Spring BootMVC应用程序,当我通过状态作为超文本传输协议参数(http://localhost:8080/greeting?status=Soemthing)之一,它只是失败与以下错误。

字段“status”上的对象“modelAndView”中存在字段错误:拒绝值[Soemthing];代码[typeMismatch.modelAndView.status,typeMismatch.status,typeMismatch.org.springframework.http.HttpStatus,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[modelAndView.status,status];论点[];默认消息[状态]];默认消息[未能将[java.lang.String]类型的属性值转换为属性“status”所需的类型[org.springframework.http.HttpStatus];嵌套异常为org。springframework。果心转换ConversionFailedException:无法将值“Soemthing”的类型[java.lang.String]转换为类型[org.springframework.http.HttpStatus];嵌套的异常是java。lang.IllegalArgumentException:没有枚举常量组织。springframework。http。HttpStatus。Soemthing]

如何从这里下载Spring官方mvc演示项目https://github.com/spring-guides/gs-serving-web-content

将Greetign控制器更改如下

@RequestMapping("/greeting")
public ModelAndView greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model, ModelAndView mv) {
    model.addAttribute("name", name);
    mv.setViewName("greeting");
    return mv;
}

我刚刚添加了一个新参数ModelAndView,还将返回类型更改为ModelAndView,而不是String。

运行项目并点击urlhttp://localhost:8080/greeting?status=Soemthing,它不工作。

花了很多时间调试,什么都找不到。

这里有完整的Stacktrace

共有3个答案

石俊雄
2023-03-14

现在可能太晚了,但我认为这会有所帮助。

public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter( MethodParameter parameter ) {
        return ModelAndView.class.equals( parameter.getParameterType() );
    }

    @Override
    public Object resolveArgument( MethodParameter parameter, ModelAndViewContainer mavContainer, 
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory ) throws Exception {
        return new ModelAndView();
    }
    
}
钮边浩
2023-03-14

尽管这是一个老帖子,但我想分享我的解决方案。

您实际上不需要ModelAndView mv方法参数。只需删除它。

字符串形式返回视图名称:

@RequestMapping("/greeting")
public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
    model.addAttribute("name", name);

    return "greeting";
}
蓝夕
2023-03-14

不要将“status”作为参数传递。因为“status”是org的默认关键字。springframework。http。HttpStatus。将其名称更改为“status\u value”或其他名称。它会起作用的

 类似资料:
  • 问题内容: 我正在这样运行我的JavaFX应用程序: 类扩展。在特殊的FX线程中启动JavaFX窗口,但是在我的main方法中,我什至没有类的实例。 如何将非字符串参数(在我的情况下为 控制器 )传递给实例?它是有缺陷的设计吗? 问题答案: 通常,除了传递给您的主程序的程序参数外,无需将参数传递给主应用程序。想要这样做的唯一原因是创建一个可重用的对象。但这并不需要是可重用的,因为这是组装您的应用程

  • 我有在Tomcat 8服务器上运行的应用程序。应用程序使用log4j2进行内部日志记录。我想有一个application.war和两个不同的日志配置文件,如:log4j2_dev.xml和log4j2_prod.xml取决于环境。 在生产环境中,我希望部署应用程序。war并使用log4j2_prod.xml,在开发环境中部署应用程序。war并使用log4j2_dev.xml 那么,我如何指定在应用

  • 我想把BigQuery表名作为运行时参数传递给我的数据流模板,就像这样简单: 这个问题有一个解决方案:https://issues.apache.org/jira/browse/beam-1440,但到目前为止我还不明白结论。

  • 我有静态方法在我的类 这就是定义 这里用的是 这是我得到的一个错误 E0167类型为“void(TV_DepthCamAgent::)(int count,int copied_file)”的参数与类型为“void()(int,int)”的参数不兼容 错误C3867“TV_DepthCamAgent::progress_callback”:非标准语法;使用' 我做错了什么?

  • 问题内容: 我有一个运行自定义gradle任务的Java应用程序,该应用程序在被调用时需要一些参数。这些是: Gradle任务如下所示: 我已尝试运行,但无法正常工作。 问题答案: 从Gradle 4.9开始,可以使用–args传递命令行参数。例如,如果要使用命令行参数启动应用程序,则可以使用 gradle run –args =’foo –bar’ 另请参阅Gradle应用程序插件 如何升级Gr

  • 问题内容: 我正在使用pm2启动我的应用程序,但无法将参数传递给它。我正在使用的命令是pm2 start app.js-dev。尽管这永远有效。 问题答案: 您可以按照此票证所述进行操作:https : //github.com/Unitech/pm2/issues/13 尽管如果通过环境,则可能需要考虑利用环境变量。使用此工具,您可以创建一个变量,该环境中的任何进程都可以访问该变量。 因此,您有