springmvc 参数表达式,用什么注解

seosqwseo3个月前 (09-06)测评日记42

一、springBoot @RequestBody 写在方法上与写在参数上的区别

1.@Controller

控制层组件,定义一个springMVC的控制器类,往往需要和@RequestMapping配合使用。

2.@RestController

相当于@ResponseBody+@Controller合在一起的作用。

3.@Service

服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,也可以指定bean的名称:@Service(“beanName”)。

4.@Repository

持久层组件,用于标注数据访问组件,即DAO组件。

5.@Component

把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>。

6.@RequestMapping

用于配置控制层的访问URL,可以用在控制器类上和控制器方法上,如果用在控制器类上,则访问类中的方法是要加上类上的路径,例如:

@Controller

@RequestMapping("/personal/linkInfo")

public class LinkInfoController{

@RequestMapping(value="/addLinkInfo")

public String addLinkInfo(LinkInfoReq linkInfoReq){

linkInfoService.addLinkInfo(linkInfoReq);

return"redirect:/personal/linkInfo/toLinkInfo";

}

}

上述代码的访问路径就是XXX/personal/linkInfo/addLinkInfo。

@RequestMapping源代码如下图:

a) value:设置访问的URL,数组,可以将多个请求映射到一个方法上去。支持通配符配置

代码示例:

@RequestMapping(value={"/page","/page*"})

public void getInfo(){

}

上述代码访问路径可以是:XXX/page,XXX/pageadc等满足value条件的路径。

b) method:设置访问的方法,数组,可是设置多个访问方法映射到同一个方法上,默认为GET方法

代码示例:

@RequestMapping(value="/page", method= RequestMethod.POST)

public void getInfo(){

}

上述代码/page路径就只能用POST方法才能请求。

method的可选值有GET,HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE。

c) params:指定request中必须包含某些参数值是,才让该方法处理。数组。

@RequestMapping(value="/page", params={"type=1"})

public void getInfo(){

}

上述代码/page路径只有请求参数中包含type且值等于1时才能访问该方法。

d) headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。数组。

示例代码:

@RequestMapping(value="/page", headers={" content-type=text/plain"})

public void getInfo(){

}

上述代码/page路径只有headers中content-type=text/plain才能访问该方法。

e) consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。

f) produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

7.@ResponseBody

通常使用在controller方法上,作用是将方法的返回值通过合适的HttpMessageConverter转换成特定格式写入到response的body区域,然后返回给客户端,如果没有使用@RequestBody注解,方法返回值将会封装到ModelAndView并解析返回视图。

8.@RequestParam

接受的参数来自requestHeader,即请求头,用来接收GET和POST请求参数并将参数赋值到被@RequestParam注解的变量上,同样可以使用requet.getParameter(“name”)获取,默认的参数接受方式,如果controller方法的参数未使用@RequestParam,则默认也是使用@RequestParam接受参数。用来处理Content-Type:为 application/x-www-form-urlencoded编码的内容。

@RequestParam有三个配置参数:

a) required:是否必须,默认true,必须。

b) defaultValue:默认值,请求的参数为空时使用默认值。

c) value:请求的参数名。

9.@RequestBody

接受的参数来自requestBody,即请求体,一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。

10.@Autowired

它可以对类成员变量,方法及构造函数进行标注,完成自动装配工作,可以消除set,get方法。

11.@Resource

其作用和@Autowired相似。

不同点:

@Resource是Java自己的注解,@Resource有两个属性重要属性,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Autowired是spring的注解,是spring2.5版本引入的,@Autowired只根据type进行注入,不会去匹配name。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier注解一起来修饰。

@Resource装配顺序

a)如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

b)如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

c)如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

d)如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

推荐使用@Resource,不用谢set方法,并且这个注解属于java自己的,减少了与spring的耦合度。

12.@Value

该注解有两种使用方式:

a)@Value(“${}”)

这种使用方式注入的是配置文件里的参数

这样配置文件中的com.title就能配置到LinkInfoController的title属性中

b)@Value(“#{}”)

该方式表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。

这样就可以把User对象的name配置到LinkInfoController的name属性中。

13.@Transactional

用于配置spring事务管理。属性信息如下:

事物的传播行为如下:

14.@SpringBootApplication

该注解其实是一个组合注解,源码如下图:

比较重要的注解有三个:

a)@SpringBootConfiguration

从源代码可以看到@SpringBootConfiguration继承自@Configuration,这两个注解的功能也是一样的。

b)@EnableAutoConfiguration

此注释自动载入应用程序所需的所有Bean。

c)@ComponentScan

该注解会扫描指定路径下的的类,并将其加入到IoC容器中。在springboot中,@ComponentScan默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。

15.@Configuration

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

16.@Bean

该注解主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。相当于配置文件里的<bean></bean>。

@Configuration

public class RedisConfig extends CachingConfigurerSupport{

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory){

RedisCacheManager redisCacheManager= RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

如上代码就相当于在xml文件里配置:

<beans>

<bean id=" cacheManager" class=" com.mypage.config. RedisCacheManager"/>

</beans>

17.@MapperScan

指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类添加位置:是在Springboot启动类上面添加:

18.@EnableCaching

该注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport{

/**

*采用RedisCacheManager作为缓存管理器

*@param connectionFactory

*@return

*/

@Bean

public CacheManager cacheManager(RedisConnectionFactory connectionFactory){

RedisCacheManager redisCacheManager= RedisCacheManager.create(connectionFactory);

return redisCacheManager;

}

}

19.@EnableRedisHttpSession

用来设置springboot使用redis存储session,该注解会创建一个名字叫springSessionRepositoryFilter的Spring Bean,其实就是一个Filter,这个Filter负责用Spring Session来替换原先的默认HttpSession实现。

示例代码如下:

@Configuration

@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 60*30)

public class HttpSessionConfig{

}

其中属性maxInactiveIntervalInSeconds是设置session的有效时间,单位毫秒,默认1800ms。

但其实这样还是不够的,还要在配置文件中设置redis存储session:

spring.session.store-type=redis

这样就可以了。

二、springmvc的注解有哪些

spring mvc常用的注解:

个介绍。

@Controller

@Controller负责注册一个bean到spring上下文中,bean的ID默认为

类名称开头字母小写,你也可以自己指定,如下

方法一:

@Controller

public class TestController{}

方法二:

@Controller("tmpController")

public class TestController{}

@RequestMapping

1.@RequestMapping用来定义访问的URL,你可以为整个类定义一个

@RequestMapping,或者为每个方法指定一个。

把@RequestMapping放在类级别上,这可令它与方法级别上的

@RequestMapping注解协同工作,取得缩小选择范围的效果。

例如:

@RequestMapping("/test")

public class TestController{}

则,该类下的所有访问路径都在/test之下。

2.将@RequestMapping用于整个类不是必须的,如果没有配置,所有的方法

的访问路径配置将是完全独立的,没有任何关联。

3.完整的参数项为:@RequestMapping(value="",method=

{"",""},headers={},params={"",""}),各参数说明如下:

value:String[]设置访问地址

method: RequestMethod[]设置访问方式,字符数组,查看RequestMethod

类,包括GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE,常用

RequestMethod.GET,RequestMethod.POST

headers:String[] headers一般结合method= RequestMethod.POST使用

params: String[]访问参数设置,字符数组例如:userId=id

4.value的配置还可以采用模版变量的形式,例如:@RequestMapping

(value="/owners/{ownerId}", method=RequestMethod.GET),这点将在介

绍@PathVariable中详细说明。

5.@RequestMapping params的补充说明,你可以通过设置参数条件来限制

访问地址,例如params="myParam=myValue"表达式,访问地址中参数只有

包含了该规定的值"myParam=myValue"才能匹配得上,类似"myParam"之类

的表达式也是支持的,表示当前请求的地址必须有该参数(参数的值可以是

任意),"!myParam"之类的表达式表明当前请求的地址不能包含具体指定的

参数"myParam"。

6.有一点需要注意的,如果为类定义了访问地址为*.do,*.html之类的,则

在方法级的@RequestMapping,不能再定义value值,否则会报错,例如

Java代码

@RequestMapping("/bbs.do")

public class BbsController{

@RequestMapping(params="method=getList")

public String getList(){

return"list";

}

@RequestMapping(value="/spList")

public String getSpecialList(){

return"splist";

}

}

如上例:/bbs.do?method=getList可以访问到方法getList();而访

问/bbs.do/spList则会报错.

@PathVariable

1.@PathVariable用于方法中的参数,表示方法参数绑定到地址URL的模板

变量。

例如:

Java代码

@RequestMapping(value="/owners/{ownerId}",

method=RequestMethod.GET)

public String findOwner(@PathVariable String ownerId, Model

model){

Owner owner= ownerService.findOwner(ownerId);

model.addAttribute("owner", owner);

return"displayOwner";

}

2.@PathVariable用于地址栏使用{xxx}模版变量时使用。

如果@RequestMapping没有定义类似"/{ownerId}",这种变量,则使用在

方法中@PathVariable会报错。

@ModelAttribute

1.应用于方法参数,参数可以在页面直接获取,相当于

request.setAttribute(,)

2.应用于方法,将任何一个拥有返回值的方法标注上@ModelAttribute,使

其返回值将会进入到模型对象的属性列表中.

3.应用于方法参数时@ModelAttribute("xx"),须关联到Object的数据类型

,基本数据类型如:int,String不起作用

例如:

Java代码

@ModelAttribute("items")//<——①向模型对象中添加一个名为items的

属性

public List<String> populateItems(){

List<String> lists= new ArrayList<String>();

lists.add("item1");

lists.add("item2");

return lists;

}

@RequestMapping(params="method=listAllBoard")

public String listAllBoard(@ModelAttribute("currUser")User user,

ModelMap model){

bbtForumService.getAllBoard();

//<——②在此访问模型中的items属性

System.out.println("model.items:"+((List<String>)

model.get("items")).size());

return"listBoard";

}

在①处,通过使用@ModelAttribute注解,populateItem()方法将在

任何请求处理方法执行前调用,Spring MVC会将该方法返回值以“items

”为名放入到隐含的模型对象属性列表中。

所以在②处,我们就可以通过 ModelMap入参访问到 items属性,当执

行 listAllBoard()请求处理方法时,②处将在控制台打印

出“model.items:2”的信息。当然我们也可以在请求的视图中访问到模型

对象中的 items属性。

@ResponseBody

这个注解可以直接放在方法上,表示返回类型将会直接作为HTTP响应字节

流输出(不被放置在Model,也不被拦截为视图页面名称)。可以用于ajax。

@RequestParam

@RequestParam是一个可选参数,例如:@RequestParam("id")注解,所以

它将和URL所带参数 id进行绑定

如果入参是基本数据类型(如 int、long、float等),URL请求参数中

一定要有对应的参数,否则将抛出

org.springframework.web.util.NestedServletException异常,提示无

法将 null转换为基本数据类型.

@RequestParam包含3个配置@RequestParam(required=,value="",

defaultValue="")

required:参数是否必须,boolean类型,可选项,默认为true

value:传递的参数名称,String类型,可选项,如果有值,对应到设置方

法的参数

defaultValue:String类型,参数没有传递时为参数默认指定的值

@SessionAttributes session管理

Spring允许我们有选择地指定 ModelMap中的哪些属性需要转存到

session中,以便下一个请求属对应的 ModelMap的属性列表中还能访问

到这些属性。这一功能是通过类定义处标注@SessionAttributes注解来

实现的。@SessionAttributes只能声明在类上,而不能声明在方法上。

例如

@SessionAttributes("currUser")//将ModelMap中属性名为currUser的属性

@SessionAttributes({"attr1","attr2"})

@SessionAttributes(types= User.class)

@SessionAttributes(types={User.class,Dept.class})

@SessionAttributes(types={User.class,Dept.class},value={"attr1","attr2"})

@CookieValue获取cookie信息

@RequestHeader获取请求的头部信息

三、springmvc***的string***类型参数***用什么注解

spring mvc常用的注解:

个介绍。

@Controller

@Controller负责注册一个bean到spring上下文中,bean的ID默认为

类名称开头字母小写,你也可以自己指定,如下

方法一:

@Controller

public class TestController{}

方法二:

@Controller("tmpController")

public class TestController{}

@RequestMapping

1.@RequestMapping用来定义访问的URL,你可以为整个类定义一个

@RequestMapping,或者为每个方法指定一个。

把@RequestMapping放在类级别上,这可令它与方法级别上的

@RequestMapping注解协同工作,取得缩小选择范围的效果。

例如:

@RequestMapping("/test")

public class TestController{}

则,该类下的所有访问路径都在/test之下。

2.将@RequestMapping用于整个类不是必须的,如果没有配置,所有的方法

的访问路径配置将是完全独立的,没有任何关联。

3.完整的参数项为:@RequestMapping(value="",method=

{"",""},headers={},params={"",""}),各参数说明如下:

value:String[]设置访问地址

method: RequestMethod[]设置访问方式,字符数组,查看RequestMethod

类,包括GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE,常用

RequestMethod.GET,RequestMethod.POST

headers:String[] headers一般结合method= RequestMethod.POST使用

params: String[]访问参数设置,字符数组例如:userId=id

4.value的配置还可以采用模版变量的形式,例如:@RequestMapping

(value="/owners/{ownerId}", method=RequestMethod.GET),这点将在介

绍@PathVariable中详细说明。

5.@RequestMapping params的补充说明,你可以通过设置参数条件来限制

访问地址,例如params="myParam=myValue"表达式,访问地址中参数只有

包含了该规定的值"myParam=myValue"才能匹配得上,类似"myParam"之类

的表达式也是支持的,表示当前请求的地址必须有该参数(参数的值可以是

任意),"!myParam"之类的表达式表明当前请求的地址不能包含具体指定的

参数"myParam"。

6.有一点需要注意的,如果为类定义了访问地址为*.do,*.html之类的,则

在方法级的@RequestMapping,不能再定义value值,否则会报错,例如

Java代码

@RequestMapping("/bbs.do")

public class BbsController{

@RequestMapping(params="method=getList")

public String getList(){

return"list";

}

@RequestMapping(value="/spList")

public String getSpecialList(){

return"splist";

}

}

如上例:/bbs.do?method=getList可以访问到方法getList();而访

问/bbs.do/spList则会报错.

@PathVariable

1.@PathVariable用于方法中的参数,表示方法参数绑定到地址URL的模板

变量。

例如:

Java代码

@RequestMapping(value="/owners/{ownerId}",

method=RequestMethod.GET)

public String findOwner(@PathVariable String ownerId, Model

model){

Owner owner= ownerService.findOwner(ownerId);

model.addAttribute("owner", owner);

return"displayOwner";

}

2.@PathVariable用于地址栏使用{xxx}模版变量时使用。

如果@RequestMapping没有定义类似"/{ownerId}",这种变量,则使用在

方法中@PathVariable会报错。

@ModelAttribute

1.应用于方法参数,参数可以在页面直接获取,相当于

request.setAttribute(,)

2.应用于方法,将任何一个拥有返回值的方法标注上@ModelAttribute,使

其返回值将会进入到模型对象的属性列表中.

3.应用于方法参数时@ModelAttribute("xx"),须关联到Object的数据类型

,基本数据类型如:int,String不起作用

例如:

Java代码

@ModelAttribute("items")//<——①向模型对象中添加一个名为items的

属性

public List<String> populateItems(){

List<String> lists= new ArrayList<String>();

lists.add("item1");

lists.add("item2");

return lists;

}

@RequestMapping(params="method=listAllBoard")

public String listAllBoard(@ModelAttribute("currUser")User user,

ModelMap model){

bbtForumService.getAllBoard();

//<——②在此访问模型中的items属性

System.out.println("model.items:"+((List<String>)

model.get("items")).size());

return"listBoard";

}

在①处,通过使用@ModelAttribute注解,populateItem()方法将在

任何请求处理方法执行前调用,Spring MVC会将该方法返回值以“items

”为名放入到隐含的模型对象属性列表中。

所以在②处,我们就可以通过 ModelMap入参访问到 items属性,当执

行 listAllBoard()请求处理方法时,②处将在控制台打印

出“model.items:2”的信息。当然我们也可以在请求的视图中访问到模型

对象中的 items属性。

@ResponseBody

这个注解可以直接放在方法上,表示返回类型将会直接作为HTTP响应字节

流输出(不被放置在Model,也不被拦截为视图页面名称)。可以用于ajax。

@RequestParam

@RequestParam是一个可选参数,例如:@RequestParam("id")注解,所以

它将和URL所带参数 id进行绑定

如果入参是基本数据类型(如 int、long、float等),URL请求参数中

一定要有对应的参数,否则将抛出

org.springframework.web.util.NestedServletException异常,提示无

法将 null转换为基本数据类型.

@RequestParam包含3个配置@RequestParam(required=,value="",

defaultValue="")

required:参数是否必须,boolean类型,可选项,默认为true

value:传递的参数名称,String类型,可选项,如果有值,对应到设置方

法的参数

defaultValue:String类型,参数没有传递时为参数默认指定的值

@SessionAttributes session管理

Spring允许我们有选择地指定 ModelMap中的哪些属性需要转存到

session中,以便下一个请求属对应的 ModelMap的属性列表中还能访问

到这些属性。这一功能是通过类定义处标注@SessionAttributes注解来

实现的。@SessionAttributes只能声明在类上,而不能声明在方法上。

例如

@SessionAttributes("currUser")//将ModelMap中属性名为currUser的属性

@SessionAttributes({"attr1","attr2"})

@SessionAttributes(types= User.class)

@SessionAttributes(types={User.class,Dept.class})

@SessionAttributes(types={User.class,Dept.class},value={"attr1","attr2"})

@CookieValue获取cookie信息

@RequestHeader获取请求的头部信息

相关文章

TCL75T7G测评使用介绍

TCL75T7G测评使用介绍

很多小伙伴在关注TCL75T7G怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

海尔(Haier)电视43英寸全高清网络液晶平板电视机WIFI智能16G家用客厅卧室价格是多少

海尔(Haier)电视43英寸全高清网络液晶平板电视机WIFI智能16G家用客厅卧室价格是多少

很多小伙伴在关注海尔(Haier)电视43英寸全高清网络液晶平板电视机WIFI智能16G家用客厅卧室怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的...

LG55英寸C2质量怎么样

LG55英寸C2质量怎么样

很多小伙伴在关注LG55英寸C2怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

正浩EcoFlow【磷酸铁锂】快充移动户外电源220V测评使用介绍

正浩EcoFlow【磷酸铁锂】快充移动户外电源220V测评使用介绍

很多小伙伴在关注正浩EcoFlow【磷酸铁锂】快充移动户外电源220V怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价...

360摄像头7P测评分享

360摄像头7P测评分享

很多小伙伴在关注360摄像头7P怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

正浩EcoFlow【磷酸铁锂】快充移动户外电源220V使用感受如何

正浩EcoFlow【磷酸铁锂】快充移动户外电源220V使用感受如何

很多小伙伴在关注正浩EcoFlow【磷酸铁锂】快充移动户外电源220V怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价...