- Spring MVC 设置Response的charset
@RequestMapping(value = "/login", produces = "text/plain;charset=gb2312") @ResponseBody public String login(HttpServletRequest req, HttpServletResponse resp) { }
- Spring MVC 超时处理
//在stackoverflow上看到的一个有趣的案例 //场景: 用户访问,如果后台处理时间<10s时返回正常结果页面,否则返回超时页面 //AsyncTaskExecutor异步任务处理, 但它的submit()方法是阻塞型的. final Future<ModelAndView> future = asyncTaskExecutor.submit(new Callable<ModelAndView>() { @Override public ModelAndView call() throws Exception { //lengthy computations... return new ModelAndView("done"); } }); try { return future.get(10, TimeUnit.SECONDS); // 设置超时时间 } catch (TimeoutException e) { //捕获超时异常进行处理 return new ModelAndView("timeout"); }
- Spring MVC 获取 Session Attribute
使用范例
@RequestMapping("/data/file/selectFileLog")
public @ResponseBody Pagination selectFileLog(@RequestBody Pagination page,
@SessionAttribute("loginUser")LoginUser loginUser){
//do sth.
}
实现步骤:
//1. 创建注解类
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface SessionAttribute {
public String value();
public boolean required() default true;
}
//2. 实现Resolver
public class SessionAttributeArgumentsResolver implements WebArgumentResolver {
Logger console = Logger.getLogger(SessionAttributeArgumentsResolver.class);
@Override
public Object resolveArgument(MethodParameter param, NativeWebRequest request)
throws Exception {
Annotation[] annotations = param.getParameterAnnotations();
for (Annotation annotation : annotations){
if(SessionAttribute.class.isInstance(annotation)){
SessionAttribute sa = (SessionAttribute) annotation;
String attrName = sa.value();
boolean required = sa.required();
Object res = request.getAttribute(attrName, RequestAttributes.SCOPE_SESSION);
if (null == res && required){
throw new RuntimeException("Attribute:{ " + attrName + " } not exsited in session !");
}
return res;
}
}
return UNRESOLVED;
}
}
<!--3. 配置Resolver -->
<mvc:annotation-driven >
<mvc:argument-resolvers>
<bean id="sessionAttributeArgumentsResolver" class="com.lhw.util.base.SessionAttributeArgumentsResolver"></bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>
- Spring JDBC 插入并获取新增记录的ID
public static long commonInsert(JdbcTemplate jt, String tableName, String idColumn, Map<String, Object> object){
SimpleJdbcInsert sji = new SimpleJdbcInsert(jt)
.withTableName(tableName)
.usingGeneratedKeyColumns(idColumn);
return sji.executeAndReturnKey(object).longValue();
}