浅谈@RequestMapping注解的注意点

目录
  • @RequestMapping注解注意点
    • 类上加没加@RequestMappin注解区别
  • @RequestMapping一个坑

@RequestMapping注解注意点

类上加没加@RequestMappin注解区别

1.如果类上加了 @RequestMappin注解,那么就会去该注解对应的路径下去找页面,如果没有对应的页面就会报错。

举例说明:

@RequestMapping("/user")
public class UserController {
    @RequestMapping("/requestParam51")
    public String requestParam51(String[] name) {
       return "index.jsp";
    }
}

对应的跳转页面会去user目录下去找,找不到就会报错。

2.如果类上没有加@RequestMapping注解,就会直接去根路径下去找页面

3.如果为跳转的页面加了"/",还是会去根路径下去找对应的页面。

举例:

@RequestMapping("/user")
public class UserController {
    @RequestMapping("/requestParam51")
    public String requestParam51(String[] name) {
       return "/index.jsp";
    }
}

@RequestMapping一个坑

今天发现了RequestMapping注解的一个坑:

当RequestMapping用于Class上时,不能用1.0,v1.0这样带小数点的value值做开头

@Controller
@RequestMapping(value = "/v1.0")
public class TestController {
    @RequestMapping(value = "/a", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody
    Object getA() {
        return  "{\"test\" : \"a\"}";
    }
    @RequestMapping(value = "/b", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody
    Object getB() {
        return  "{\"test\" : \"b\"}";
    }
}

如上代码运行后,访问http://localhost:port/v1.0/a 或者http://localhost:port/v1.0/b 时都会报错:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'testController' bean method 
public java.lang.Object com.my.test.controller.TestController.getB()
to {[/v1.0],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}: There is already 'testController' bean method

单看异常信息,还以为是有重名的路径,结果搜遍了工程也没找到重名的类,后来"v1.0"改成"v1",就正常运行了。

顺带测试了下,发现改成1.0也是同样的错误。

之后再把一个方法上RequestMapping的value去掉,采用默认写法:

    @RequestMapping("/b")
    public @ResponseBody
    Object getB() {
        return  "{\"test\" : \"b\"}";
    }

再运行起来,访问http://localhost:port/v1.0/a或者http://localhost:port/v1.0/b 就会变成404错误。

HTTP Status 404 - /v1.0/a
type Status report
message /v1.0/a
description The requested resource is not available.

没深究根本原因,估计是Spring的小bug,以后避免带小数点的路径头。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 类添加注解@RequestMapping报错HTTP Status 404的解决

    目录 类添加注解@RequestMapping报错HTTP Status 404 springMVC使用@RequestMapping遇到的问题 1.简介 2.属性简介 3.测试使用时遇到的问题 解决后的源码是 类添加注解@RequestMapping报错HTTP Status 404 为类添加了@RequestMapping注解后,运行报错404,路径不对,找了半天才发现原来是我的视图解析器的前缀没有写正确 在WEB-INF前面少加了一个/,加上之后运行ok springMVC使用@Reque

  • Spring MVC之@RequestMapping注解详解

    引言: 前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/json, 而且服务器端通过request.getReader() 打出的数据里确实存在浏览器提交的数据.为了找出原因,便对参数绑定(@RequestParam. @RequestBody. @RequestHeader . @PathVariable)进行了研究,同时也看了一下HttpMessage

  • SpringMVC @RequestMapping注解详解

    目录 一.@RequestMapping 1.@RequestMapping注解的功能 2.@RequestMapping注解的位置 二.@RequestMapping注解的属性 1.value属性(掌握) 2.method属性(掌握) 3.params属性(了解) 4.headers属性(了解) 5.SpringMVC支持ant风格的路径 6.SpringMVC支持路径中的占位符(重点) 三.@RequestMapping的派生类注解 测试form表单是否支持put或delete方式的请求 一

  • Java工具类之@RequestMapping注解

    一.前言 问题阐述:在某一场景下,我们的代码在 Service 实现相同,但却在 Controller 层访问时却希望不同的前缀可以访问.如下 :/say/hello.我们这里希望在不借助任何外部服务的情况下 通过 /a/say/hello 和 /b/say/hello 都可以访问到该接口,同时不想在 Controller 中写两个方法. @RestController @RequestMapping("say") public class SayController { @Autow

  • 浅谈@RequestMapping注解的注意点

    目录 @RequestMapping注解注意点 类上加没加@RequestMappin注解区别 @RequestMapping一个坑 @RequestMapping注解注意点 类上加没加@RequestMappin注解区别 1.如果类上加了 @RequestMappin注解,那么就会去该注解对应的路径下去找页面,如果没有对应的页面就会报错. 举例说明: @RequestMapping("/user") public class UserController {     @Request

  • 浅谈自定义注解在Spring中的应用

    1.Java自定义注解与Spring Java注解作为程序元素(类.成员变量.成员方法等)的一种元数据信息,对程序本身的执行不会产生影响.通过自定义注解,可以给程序元素添加特殊的声明. Spring作为构建企业级应用的平台,提供了丰富的功能.将Java的自定义注解与Spring结合,在特定场景下实现注解的解析.处理,可以降低应用的耦合度,提高程序的可扩展性. 2.应用场景 下面总结几种应用场景,仅说明大致思路(ps:并非所有场景都在项目中实践过) 2.1登陆.权限拦截 在web项目中,登陆拦截和

  • 浅谈springBoot注解大全

    一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration注解.其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文. @Configuration 等同于spring的XML配置文件:使用Java代码可以检查类型安全. @EnableAutoConfiguration 自动配置. @Compon

  • 浅谈Java注解和动态代理

    本文主要介绍Java中与注解和动态代理有关的部分知识,接下来我们看看具体内容. Annotation(注解) 其实就是代码里的特殊标记, 它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行. 1. 三个基本的Annotation: Override:限定重写父类方法, 该注解只能用于方法 Deprecated:用于表示某个程序元素(类, 方法等)已过时 SuppressWarnings:抑制编译器警告. 2.自定义Annotati

  • 浅谈spring注解之@profile

    spring中@profile与maven中的profile很相似,通过配置来改变参数. 例如在开发环境与生产环境使用不同的参数,可以配置两套配置文件,通过@profile来激活需要的环境,但维护两套配置文件不如maven中维护一套配置文件,在pom中通过profile来修改配置文件的参数来的实惠. 也有例外,比如我在开发中调用商城接口经常不能返回我需要的数据,每次都需要mock数据,所以我写了一个mock参数的借口调用类,在开发环境中就使用这个类,测试环境与生产环境则使用正常的借口调用类,这样

  • 浅谈spring 常用注解

    我们不妨先将spring常用的注解按照功能进行分类 1 .将普通类加入容器形成Bean的注解 日常开发中主要使用到的定义Bean的注解包括(XML方式配置bean暂不讨论): @Component.@Repository.@Service.@Controller.@Bean 其中@Component.@Repository.@Service.@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型.当一个组件代表数据访问层(Dao)时,你可以给它加上@Reposit

  • 浅谈Java中static和非static的区别

    关于static和非static变量的区别 1. static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在.非static修饰的成员变量是在对象new出来的时候划分存储空间,是与具体的对象绑定的,该成员变量仅为当前对象所拥有的. 2. static修饰的变量在加载的时候先于main方法加载在内存中的数据共享区-------方法区,而非static的变量在加载的时候,是要创建变量才加载在堆内存中的. 3. 一个stat

  • 浅谈SpringBoot处理url中的参数的注解

    1.介绍几种如何处理url中的参数的注解 @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写 (1)PathVaribale 获取url中的数据 看一个例子,如果我们需要获取Url=localhost:8080/hello/id中的id值,实现代码如下: @RestController public class Hello

  • 浅谈自定义校验注解ConstraintValidator

    目录 一.前言 二.自定义参数校验器 三.使用自定义注解 一.前言 系统执行业务逻辑之前,会对输入数据进行校验,检测数据是否有效合法的.所以我们可能会写大量的if else等判断逻辑,特别是在不同方法出现相同的数据时,校验的逻辑代码会反复出现,导致代码冗余,阅读性和可维护性极差. JSR-303是Java为Bean数据合法性校验提供的标准框架,它定义了一整套校验注解,可以标注在成员变量,属性方法等之上. hibernate-validator就提供了这套标准的实现,我们在用Springboot开

  • 浅谈Java中注解Annotation的定义、使用、解析

    此例子,用于说明如何在Java中对"注解 Annotation"的定义.使用和解析的操作.注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记.下面例子已测试,可以正常运行通过. 1.注解自定义. 这里定义两个注解,分别用来注解类和注解属性. package cc.rulian.ann; import java.lang.annotation.ElementType; import java.lang.annotation.Retention;

随机推荐