一. @Repository 属性
@Target({java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Repository { String value() default ""; }
如 @Controller 用在 Action 层, @Repository 常常用在 Dao层。 只有一个 value的属性。
@Repository public class UserDaoImpl implements UserDao{ }
也可以添加value 来指定实例。
@Repository(value="userDao") public class UserDaoImpl implements UserDao{ }
也可以省略value.
@Repository(value="userDao") public class UserDaoImpl implements UserDao{ }
二. @Service 属性
@Target({java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { String value() default ""; }
常常用在 Service 业务层中。 与@Repository 用法一一致。
@Service(value="userService") public class UserServiceImpl implements UserService{ }
三. @RequestBody
@Target({java.lang.annotation.ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestBody { boolean required() default true; }
@RequestBody ,是将HTTP 中请求体的正文插入到方法中。 作用在方法的参数上。
三.一 运行过程:
1 . 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
2 . 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
三.二 类型提交
常见的表单方式的 的Get 和POST 提交时, 会根据请求头的Content-Type 类型进行相应的判断。
提交类型为 application/x-www-form-urlencoded 时, 即form 表单的默认形式, 这个时候,可以用@RequestBody 来处理,也可以通过前面的 @RequestParam 和@ModelAttribute 来获取。 可注解,也可以不注解。
提交类型为 multipart/form-data, 即二进制的,如上传图片的,这个时候,@RequestBody 处理不了。
提交类型为 application/json, 即json形式时, 必须用@RequestBody 来进行处理。 也必须要注解。
常常是 前端传入 json 对象时,进行相应的解析,解析成字符串。 JSON的处理,会有专门的章节来讲解。
如果请求方式是 PUT 形式时,
提交类型为 application/x-www-form-urlencoded 时, 即form 表单的默认形式,必须添加。
提交类型为 multipart/form-data, 即二进制的,如上传图片的,这个时候,@RequestBody 处理不了。
提交类型为 application/json, 即json形式时, 必须用@RequestBody 来进行处理。 也必须要注解。
三.三 数据填充
如果是单个值的话
@RequestMapping(value="/register") public String register(@RequestBody String name){ System.out.println("接收名称:"+name); return "user/list"; }
如果是多个值的话
@RequestMapping(value="/register") public String register(@RequestBody String name, Integer age, String sex, String description){ System.out.println("接收名称:"+name); System.out.println("接收年龄:"+age); System.out.println("接收性别:"+sex); System.out.println("接收描述:"+description); return "user/list"; }
注意,只能用一个@RequestBody ,不能每一个参数都写上。
这样写,是错误的。
@RequestMapping(value="/register") public String register(@RequestBody String name, @RequestBody Integer age, @RequestBody String sex, @RequestBody String description){ System.out.println("接收名称:"+name); System.out.println("接收年龄:"+age); System.out.println("接收性别:"+sex); System.out.println("接收描述:"+description); return "user/list"; }