spring mvc
一、入参转换器
- 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中。一种直接在其中配置
- 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获取不到
- 复杂数组对象和复杂集合对象 不知道咋传递
- 层级对象和多个对象 使用InitBinder和ModelAttribute。
- json数据传输
- 层级对象,数组对象和集合对象 ajax形式:contentType设置为application/json,data为字符串--JSON.stringify(json对象) controller:参数前使用RequestBody
- 多个对象 没有办法直接转换,可以使用Map<String,Object>接收,然后使用json框架转换为对象
- 日期格式注入
- 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注解--------一直没有测试成功
- form形式
- boolean类型注入
- form形式 使用true,false,on,off,1或者0都可以注入。需要注意入参的key值必须和set方法匹配,因为如果属性为is开头,自动生成的set和get方法是没有is的。
- json形式 只能使用true和false,不能其他,否则会报错
二、spring+mybatis
- 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层都得有注解


浙公网安备 33010602011771号