使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI相关的知识,希望对你有一定的参考价值。

//----web.xml配置
<servlet>
<servlet-name>annomvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/annomvc-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>annomvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
//----annomvc-servlet.xml配置
<context:annotation-config />
<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com.svs.master.controller" />
//---controller
@Controller
@RequestMapping(value = "/userlogin.do")
public class UserLoginController
@RequestMapping(params="method=login", method = RequestMethod.POST)
public String userLogin(HttpServletRequest request,
HttpServletResponse response) throws Exception
//...方法内容

参考技术A <url-pattern>*.do</url-pattern>
改为
<url-pattern>/</url-pattern>
这好像是spring框架处理所有请求的特定写法,这和Filter写法不一致
参考技术B

No mapping found for HTTP request with URI 

我也遇到这个问题,反正我就是这么改就解决问题了

<!-- Spring MVC的核心是DispatcherServlet,这个servlet充当Spring MVC的前端控制器 <servlet-name>spitter</servlet-name>一定要spitter.servlet.xml配置文件 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 通过将DispatcherServlet映射到/,声明了它会作为默认的servlet并且会处理所有的请求,包括对静态资源的请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

改成:

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

参考技术C 你请求的url 是什么?追问

页面

报错:
No mapping found for HTTP request with URI
[/test/csy/page/userlogin.do] in DispatcherServlet with name 'annomvc'

Spring MVC的常用注解

Spring Boot 默认集成了Spring MVC,下面为Spring MVC一些常用注解。

开发环境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

新建一个名称为demo的Spring Boot项目。

一、Controller注解

Controller注解用于修饰Java类,被修饰的类充当MVC中的控制器角色。
Controller注解使用了@Component修饰,使用Controller注解修饰的类,会被@ComponentScan检测,并且会作为Spring的bean被放到容器
中。

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class DemoController 

    @RequestMapping("/index")
    @ResponseBody
    public String index()
        return "index";
    

运行项目后,浏览器访问:http://localhost:8080/index,页面显示:
index

二、RestController注解

RestController注解是为了更方便使用@Controller和@ResponseBody。
@ResponseBody修饰控制器方法,方法的返回值将会被写到HTTP的响应体中,所返回的内容不放到模型中,也不会被解释为视图的名称。
下面例子等同于上面例子。

package com.example.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController 

    @RequestMapping("/index")
    public String index()
        return "index";
    

三、RequestMapping注解

RequestMapping注解可修饰类或方法,主要用于映射请求与处理方法。
当用于修饰类并设置了URL时,表示为各个请求设置了URL前缀。
RequestMapping注解主要有以下属性:
(1)path与value:用于配置映射的url;
(2)method:映射的HTTP方法,如GET、POST、PUT、DELETE;
也可以使用默认配置了@RequestMapping的method属性的几个注解:
@GetMapping等同于RequestMapping(method="RequestMethod.GET")
@PostMapping、@PutMapping、@DeleteMapping类似。
(3)params:为映射的请求配置参数标识;
(4)consumes:配置请求的数据类型,如XML或JSON等;
(5)produces:配置响应的数据类型,如“application/json”返回json数据;

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/oa")
public class DemoController 

    @RequestMapping(value = "/index1")
    public String index1()
        return "index1";
    

    @RequestMapping(value = "/index2", method = RequestMethod.GET)
    public String index2()
        return "index2";
    

    @GetMapping(value = "/index3")
    public String index3()
        return "index3";
    

浏览器分别访问:
http://localhost:8080/oa/index1
http://localhost:8080/oa/index2
http://localhost:8080/oa/index3
页面分别显示:
index1
index2
index3

四、PathVariable注解

PathVariable注解主要用于修饰方法参数,表示该方法参数是请求URL的变量。

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController 

    @GetMapping("/index1/name")
    public String index1(@PathVariable String name)
        return "index1: " + name;
    

    //可以为@PathVariable配置属性值,显式绑定方法参数与URL变量的值
    @GetMapping("/index2/name")
    public String index2(@PathVariable("name") String lc)
        return "index2: " + lc;
    

浏览器访问http://localhost:8080/index1/a
页面显示:
a
访问http://localhost:8080/index1/b
页面显示:
b

五、RequestParam注解

RequestParam注解用于获取请求体中的请求参数,如表单提交后获取页面控件name值。

package com.example.demo;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class DemoController 

    @PostMapping("/index1")
    public String index1(@RequestParam String userName)
        return userName;
    

    //map存放所有请求参数
    @PostMapping("/index2")
    public String index2(@RequestParam Map<String,String> map)
        String age = map.get("age");
        String sex = map.get("sex");
        return age + "," + sex;
    

随便在电脑中如桌面新建一个html文件:

<html>
<body>
  <form method="post" action="http://localhost:8080/index1">
    <input type="text" name="userName" value="abc" />    
    <input type="submit" value="提交1" />
  </form>
  <form method="post" action="http://localhost:8080/index2">
    <input type="text" name="age" value="22" />
    <input type="password" name="sex" value="male" />    
    <input type="submit" value="提交2" />
  </form>
</body>
</html>

浏览器打开后,如果点击“提交1”按钮后,页面跳到http://localhost:8080/index1,显示abc。
如果点击“提交2”按钮后,页面跳到http://localhost:8080/index2,显示22,male。

六、文件上传

使用RequestParam注解可以实现文件上传。

package com.example.demo;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
public class DemoController 

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException 
        String fileName = file.getOriginalFilename();
        String filePath = "D:/";
        File dest = new File(filePath + fileName);
        file.transferTo(dest);
        return "上传成功";
    

随便新建一个html文件

<html>
<body>
  <form method="post" action="http://localhost:8080/upload" enctype="multipart/form-data">
    <input type="file" name="file" />    
    <input type="submit" value="提交" />
  </form>  
</body>
</html>

浏览器打开后,选择一个文件,点击提交后,文件保存到了D盘。

以上是关于使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC @CookieValue注解

spring mvc 常用注解详解

简单模拟Sping MVC

如何在带有注解配置的spring mvc中使用spring数据

使用全注解配置Spring MVC+Spring +MyBatis框架,带事务配置。

ajax请求 spring mvc responsebody 注解的方法 为啥写不了cookie