注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

spring mvc 的annotation formatter  

2014-06-10 16:47:30|  分类: spring mvc |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      spring mvc的controller里,提交的变量参数,有些类型字段可能会有多种不同的字符显示格式,最常见就是日期。Date类型变量,可以定义成这样
@DateTimeFormat(iso=ISO.DATE, pattern = "yyyy-MM-dd")
private Date tour_date;
然后按照指定的格式提交字符串,spring mvc就自动转成相应的Date类型了。
      具体如何转换,还可以自己定义,这里有个例子
http://stackoverflow.com/questions/23114577/liferay-spring-mvc-annotationformatterfactory
代码:
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ListSelector {

    public enum ListSelectorType {
        UTILISATEURS
    }

    ListSelectorType type();
    boolean useReferentiel() default true;

}


public class ListSelectorUtilisateurFormater implements Formatter<List> {

    private static final Log LOG = LogFactory.getLog(ListSelectorUtilisateurFormater.class);

    public ListSelectorUtilisateurFormater() {
    }

    @Override
    public String print(final List listeUtilisateurs, final Locale locale) {
        try {
            return ConvertJSONUtilForListSelector.convertUserToJSON(listeUtilisateurs).toString();
        } catch (JSONException e) {
            ListSelectorUtilisateurFormater.LOG.error("error formatting user list to JSON", e);
            return null;
        }
    }

    @Override
    public List parse(final String formatted, final Locale locale) throws ParseException {
        List<String> extractedIds;
        List<Utilisateur> users = new ArrayList<Utilisateur>();
        if (StringUtils.isNotBlank(formatted)) {
            extractedIds = Arrays.asList(formatted.split(","));
                // génére une liste d'utilisateurs n'ayant que des ids
                for (final String id : extractedIds) {
                    final Utilisateur user = new Utilisateur();
                    user.setId(id);
                    users.add(user);
                }
        }
        return users;
    }

}



public class ListSelectorFormatterFactory implements AnnotationFormatterFactory<ListSelector> {

    private final Set<Class<?>> fieldTypes;

    public ListSelectorFormatterFactory(
                UtilisateurService utilisateurService) {

        Set<Class<?>> rawFieldTypes = new HashSet<Class<?>>(1);
        rawFieldTypes.add(List.class);
        this.fieldTypes = Collections.unmodifiableSet(rawFieldTypes);
    }

    @Override
    public Set<Class<?>> getFieldTypes() {

        return this.fieldTypes;
    }

    @Override
    public Printer<?> getPrinter(ListSelector annotation, Class<?> fieldType) {

        return configureFormatterFrom(annotation, fieldType);
    }

    @Override
    public Parser<?> getParser(ListSelector annotation, Class<?> fieldType) {

        return configureFormatterFrom(annotation, fieldType);
    }

    private Formatter<?> configureFormatterFrom(ListSelector annotation, Class<?> fieldType) {

        switch (annotation.type()) {
            case UTILISATEURS:
                        return new ListSelectorUtilisateurFormater();
            default:
                return null;
        }

    }

}



public class Pojo {

    @ListSelector(type= ListSelector.ListSelectorType.UTILISATEURS)
    private List<Utilisateur> test = new ArrayList<Utilisateur>();

    @ListSelector(type= ListSelector.ListSelectorType.UTILISATEURS)
    private Utilisateur[] test2;

    @DateTimeFormat(iso= DateTimeFormat.ISO.TIME)
    private Date date;

    public List<Utilisateur> getTest() {
       return test;
    }

    public void setTest(List<Utilisateur> test) {
       this.test = test;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}
如上,实现AnnotationFormatterFactory接口,就可以在参数类中使用自定义的formate注解了
  评论这张
 
阅读(1157)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017