spring mvc

一、入参转换器

  1. springmvc转换方式
    • 使用注解方式    比如入参上标识@DataTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")              
    • 使用属性编辑器     自定义需要可以直接继承PropertyEditorSuppor,重写setAsText和getAsText方法。使用方式:controller中使用@InitBinder注解创建方法,入参为WebDataBinder进行编辑器和类型的绑定
    • 使用转换器            创建实现Converter或者Formatter接口的类。使用方式:配置文件中创建ConversionServiceFactoryBean或FormattingConversionServiceFactoryBean并注入创建的类;配置annotation-driven的conversion-service属性
    • 以上是针对于form形式,即参数在form data中
    • json形式    使用默认框架可以实现多个对象,层级对象,数组对象和集合对象的序列化和反序列化,如果需要针对更小粒度的操作,比如boolean类型,枚举类型,日期类型的转换,可以通过以下两种方式:
      • @JsonDeserialize(using = DateJsonDeserializer.class)配合JsonDeserializer实现类,达到反序列化功能
      • @JsonSerialize(using=DateJsonSerializer.class)配合JsonSerializer实现类,达到序列化的效果
      • 自定义json转换器格式。一种继承ObjectMapper,并注入到MappingJacksonHttpMessageConverter中。一种直接在其中配置
  2. form形式下数据传输
    • 层级对象和多个对象      使用InitBinder和ModelAttribute。  
    • 简单数组对象和简单集合对象    
      • 简单数组  基本类型数组     form形式,只要将name设置成同一个名称即可;如果使用ajax形式,traditional必须设置为true
      • 简单集合  基本类型集合     form形式,除了name设置为同一个值,controller中必须使用RequestParam注解指定入参名称;ajax形式同样traditional必须设置为ture
      • traditional指定序列化的形式. true:name=1  name=2  name=3    false:name[]=1  name[]=2  name[]=3   false名称后有中括号,controller获取不到
    • 复杂数组对象和复杂集合对象   不知道咋传递
  3. json数据传输
    • 层级对象,数组对象和集合对象     ajax形式:contentType设置为application/json,data为字符串--JSON.stringify(json对象)       controller:参数前使用RequestBody
    • 多个对象   没有办法直接转换,可以使用Map<String,Object>接收,然后使用json框架转换为对象
  4. 日期格式注入
    • form形式
      • 使用DateTimeFormat(pattern="yyyy-MM-dd")注解。导入joda-time包;在set或属性上使用注解。
      • 使用converter创建转换器。实现converter接口;springmvc配置文件创建ConversionServiceFactoryBean并注入实现类;配置annotaion-driven的conversion-service
      • 使用Formatter创建转换器。实现Formatter接口;spirngmvc配置文件创建FormattingConversionServiceFactoryBean;并注入实现类;配置annotation-driven的conversion-service
      • 使用InitBinder  在controller中创建方法,入参为WebDataBinder,使用InitBider注解,创建注册转换方式-----------------此方式不能跨controller
    • json形式
      • 创建序列化(继承JsonSerializer)和反序列化(继承JsonDeserializer)类,属性上使用注解JsonSerialize(using=DateJsonSerializer.class),JsonDeserialize(using=DateJsonDeserializer.class)
      • springmvc配置文件中配置json转换器时,注入自定义格式转换类
      • 使用JsonFormat注解--------一直没有测试成功
  5. boolean类型注入
    • form形式    使用true,false,on,off,1或者0都可以注入。需要注意入参的key值必须和set方法匹配,因为如果属性为is开头,自动生成的set和get方法是没有is的。
    • json形式    只能使用true和false,不能其他,否则会报错

二、spring+mybatis

  1. service层事务失效
    • bean必须是由spring创建的,不能new;同一个类中方法互相调用,事务不起作用
    • tx:annotation-driven必须和扫描语句在同一个配置文件中。一般springMVC有两个配置文件。比如:启动注解的配置,写在appication.xml中;此文件中也扫描了包;spring-servlet.xml配置了扫描包,如果两个扫描的同一个包或者spring-servlet.xml扫描的注解包,则事务无效。所以,spring-servlet.xml使用context:include-filter,只扫描controller注解,其他注解不扫描;spring.xml中不用限制
    • 注解配置从开始的方法到最底层的方法都必须有。比如:service方法中添加注解,则service,dao层都得有注解
posted @ 2018-03-23 09:38  国际庄_码农  阅读(168)  评论(0)    收藏  举报