SpringMVC
ModelAndView
- 在 controller 中获取 session 的属性.
@Controller
@SessionAttributes("adminUser") // 申明需要从 session 中取得的属性名.
public class ConfigController extends BaseController {
@RequestMapping(value = "/admin/config/create", method = POST, produces = "application/json;charset=utf-8")
@ResponseBody
public String createX1Config(@ModelAttribute("adminUser") AdminUser admin,String... theOtherParams){
// 通过 @ModelAttribute("adminUser") 注解已经注入了需要的属性.
}
}
Configuration
自定义类型转换器
目标: 将配置文件中的日期字符串转换成 LocalDate 对象
原文: Spring Boot - Custom Type Conversion with @ConfigurationProperties src/main/resources/application.properties
spring.main.banner-mode=off
spring.main.logStartupInfo=false
app.exit-on-errors=true
app.trade-start-date=03-25-2016
配置类
@Component
@ConfigurationProperties("app")
public class MyAppProperties {
private boolean exitOnErrors;
private LocalDate tradeStartDate;
// do something
}
自定义转换器
本例将提供一个客制化的转换器来实现我们想要的转换. 该转换器应该注册为 Spring Bean,并且还应该使用 Qualifier 注释 @ConfigurationPropertiesBinding 进行注释. ConfigurationPropertiesBindingPostProcessor 负责将所有外部属性绑定到用 @ConfigurationProperties 注释的bean. 此 BeanPostProcessor 还检测用 @ConfigurationPropertiesBinding 进行类型转换的自定义转换器(除默认转换器外)
@Component
@ConfigurationPropertiesBinding
public class LocalDateConverter implements Converter<String, LocalDate> {
@Override
public LocalDate convert(String source) {
if(source==null){
return null;
}
return LocalDate.parse(source, DateTimeFormatter.ofPattern("MM-dd-yyyy"));
}
}
Main class
@SpringBootApplication
public class ExampleMain {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext context = SpringApplication.run(ExampleMain.class, args);
MyAppProperties bean = context.getBean(MyAppProperties.class);
System.out.println(bean);
}
}
兼容性问题
- Spring3 + JDK1.8
需要编译成 JDK1.7 或者不用 lambda表达式, stream 等 1.8 的新特性. 否则会报错. - SpringBoot + JDK1.6
使用 1.2.1.RELEASE 可适配 JDK1.6 之后的版本对 JDK1.6 的支持不佳 不推荐使用. 同时需要修改 tomcat 的版本到 7.0.59. spring-boot-starter-jdbc 中添加 exclusion 排除默认的 tomcat-jdbc 8.xx.