1.@Controller和@RestController
共同点:都是用来表示Spring中的某个类可以接收HTTP请求的。
不同点:@Controller标识一个Spring类是Spring MVC Controller处理器,@RestController是@Controller和@ResponseBody的结合体。
如果只使用@RestController注解controller则,无法返回jsp页面,配置视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容
例如:本来应该到success.jsp页面的,则其显示success.
如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
2.@Autowired和@Resouse的区别
@Autowired是Spring的自定义注解,@Resouse是jdk规范定义的注解。@Resouse相当于@Autowired。
@Autowired是Bytype自动注入,@Resouse默认是Byname自动注入。
@Resouse有两个非常重要的属性type和name,Spring将@Resouse注解的name属性解析为bean的名字,而type属性解析为bean的类型。如果使用name属性,则使用byName自动注入,使用type则使用byType自动注入
默认是byName注入。
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
3.接收参数的常用注解
拼接在url后面的传参形式:@PathVariable、@RequestParam、@Validated
接收request header部分的参数:@RequestHeader、@CookieValue
接收request body部分的参数:@RequestBody
@PathVariable用于接收restful方式的请求
eg:http://ip,port/qumy/test/1
@GetMapping("/test/{id}")
public String test(@PathVariable("id") long id){return null;}
@RequestParam用于接收params方式的请求。
eg:http://ip:port/qumy/test?id=1
@GetMapping("/test")
public String test(@RequestParam Long id) { return null; }
@Validated注解可以用一个模型来接收地址栏中的参数。
eg:http://ip:port/qumy/test?id=1
@GetMapping(value = "/test")
public String test(@Validated User user) { return null;}
@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。
request header(请求头):
Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
@GetMapping("/test")
public String test(@RequestHeader("Accept-Encoding") String encoding) { return null;}
@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。
cookie: JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
@GetMapping("/test")
public String test(@CookieValue("JSESSIONID") String cookie) {return null;}
@RequestBody注解用来接收request的body中的参数,@RequestBody可以将多个参数放入到一个实体类或者Map中。
// 实体类
@PostMapping(value = "/test")
public String test(@RequestBody ParameterModel parameterModel) {
return null;
}
// Map
@PostMapping(value = "/test)
public String test(@RequestBody Map<String, Object> paramMap) {
return null;
}
4.后台接收List做批量操作
controller层
@PostMapping("/delete")
public AjaxResult delete(@RequestBody List<Integer> ids) {
int delete = storeService.deleteByIds(ids);
return toAjax(delete);
}
mybatis层
<update id="deleteByIds" parameterType="java.util.List" >
update tp_store
set deleted = 1
where store_id in
<foreach item="ids" collection="list" separator="," open="(" close=")" index=""> #{ids}
</foreach>
</update>