springboot Date类型对象绑定

作者: 殷天文 | 来源:发表于2018-01-26 18:29 被阅读647次

    这个困扰我已久的问题,今天终于解决了,之前看过好多博客,屡试不爽,今天终于解决了,在这里分享一下解决方案。
    首先看@RequestBody,当前端使用ajax,传输json数据的时候,只需要在实体的 Date属性上加@JsonFormat即可,因为springboot默认使用Jackson处理json

    //controller
    @RequestMapping("/save")
    @ResponseBody
    public String save(HttpServletRequest request, @RequestBody DutyBean dutyBean){
        return null;
    }
    
    //bean
    import java.util.Date;
    import com.fasterxml.jackson.annotation.JsonFormat;
    
    public class DutyBean implements Serializable {
    
        private static final long serialVersionUID = -5999151785938349105L;
    
         /**
         * 事件名称
         */
        private String dutyName;
    
        /**
         * 创建人
         */
        private Long createUser;
    
        /**
         * 创建时间
         */
        @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
        private Date createTime;
    
        /**
         * 最后修改人
         */
        private Long lastModifyUser;
    
        /**
         * 最后修改时间
         */
        private Date lastModifyTime;
    
        /**
         * 是否完结
         */
        private Integer isEnd;
        
        /**
         * 提醒时间
         */
        private Date remindTime;
    
        /**
         * 是否提醒(1否,0是)
         */
        private Integer isRemind;
        
        /**
         * 日志内容
         */
        private String dutyLog;
        
        /**
         * 文件集合
         */
        private List<DutyFileModel> fileList;
        
        //省略get set
    }
    
    

    前端ajax需要加上

    contentType: 'application/json;charset=utf-8',
    data:JSON.stringify(json),
    

    json的结构和 key,要和 bean里的结构、属性名完全一致,bean里可以包含其他对象,例如fileList

    json结构

    再来看看不使用 json的时候,如何绑定Date
    controller加如下代码即可

    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import java.beans.PropertyEditorSupport;
    
        @InitBinder
        public void InitBinder(WebDataBinder dataBinder) {  
            dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {  
                public void setAsText(String value) {  
                    try {  
                        setValue(new SimpleDateFormat("yyyy-MM-dd").parse(value));  
                    } catch(ParseException e) {  
                        setValue(null);  
                    }  
                }  
          
                public String getAsText() {  
                    return new SimpleDateFormat("yyyy-MM-dd").format((Date) getValue());  
                }          
          
            });  
        }
    

    相关文章

      网友评论

      本文标题:springboot Date类型对象绑定

      本文链接:https://www.haomeiwen.com/subject/ojmwaxtx.html