一、Spring mvc的@RequestMapping虽然不能被继承,但是能够享受方法的@RequestMapping带来的效果,这是Spring注解扫描机制,而不是@RequestMapping被继承所造成的,父类的注解子类能否继承关键在于是否有加@Inherited注解。

二、关于Spring 容器问题,Spring在实例化组件的时候默认会给一个类名一个字母为小写的ID,如果有相同的ID,则Spring 容器不能将组件实例化,会抛出异常,但是可以在@Compoent(“ID”)给予自定义ID,Spring 可以实例化多个相同类型的实例只要ID不相同,但是在使用@Autowired注入实例,@Autowired会默认按照类型来注入,如果在IOC容器中存在相同类型的两个类的实例,则Spring不能判断是要注入哪一个,所以会抛出异常,可以使用@Resource加上ID值进行注入。

三、 基于Spring MVC开发的模式,一般的,Controller层只负责页面层相关代码的处理,Service层负责业务相关的处理,对于不能正常的运行的代码需要抛出异常,Spring @Transactional注解标记需要需要事务的方法。事务的传播行为,事务的隔离级别等,标记后的AOP默认会捕获RuntimeException,导致事务回滚。业务层处理业务逻辑,Controller层处理页面逻辑。业务层尽量以抛出异常处理,if(error)throw exception 形式,Controller以try-catch 捕获Service层抛出的异常,这样可以用户友好的方法方式返回信息。Spring mvc提供了全局处理异常的方式。

四、使用@ControllerAdvice和@ExceptionHandler注解处理全局异常。
1. @ControllerAdvice 是一个@Component,能够被自动扫描注入Spring容器中。用于定义@ExceptionHandler,@InitBinder,@ModelAttribute在所有的@RequestMapping,@ExceptionHandler处理所有的@RequestMapping方法中抛出的异常。

@ControllerAdvice
 public class ExceptionHandler{
    @ExceptionHandler(Exception.class)
    @ResponseBody/@RequestMapping
    @ResponseStatus(HttpStatus,reason)
     poublic String handleException(Exception e){
     }
  }

2. @ResponseStatus用于修饰一个异常类或者方法,如果修饰@RequestMapping的方法那这个方法都返回一样的httpstatus 200 404等。用于自定义异常绑定http状态码。

五、HTTP请求参数绑定问题
1. GET 请求参数是使用URL传参的,服务器可以通过getParameter方法获取参数。
2. POST 请求参数可以是URL类型,也可以是 x-www-form-urlencoded 参数,这些参数都可以被getParameter获取。
3. Query String Parameter :就是指通过URL传入的参数,可以被getParameter方法获取到,拼接在URL后面,可以是Post请求,也可以是Get请求。
4. Form Data : 表单参数是存储在请求正文中,其Content-Type为x-www-form-urlencoded,也可以被getParameter方法获取到参数。
5. Request payload :是指其Content-Type 不是x-www-form-urlencoded,其数据存储在请求正文中,不能使用getParameter方法获取到参数。
6. @RequestParam,@RequestBody,@RequestPart
* @RequestParam 此注解绑定的是能被getParamter方法获取的参数,就是指Query String Parameter,Form Data.
* @RequestBody 此注解绑定的是不能被getParamter方法获取的参数,一般对应的Content-Type为application/json,application/xml 等。@RequestPart 此注解绑定是文件上传的参数一般的使用 public void upload(@RequestPart Mulit)