Springboot@InitBinderラベルフォームデータへのバインド


文書ディレクトリ
  • 記事参照
  • @InitBinderの役割
  • springMVCフォーム注入オブジェクトの実現原理
  • Controllerクラスに@InitBinder注記メソッドを追加
  • を解決
  • Controllerクラス統合BaseControllerクラス(@InitBinderメソッド実装タイプ変換あり)
  • 記事参照
  • @InitBinderの役割
  • springMVCフォーム注入オブジェクトの実現原理
  • Controllerクラスに@InitBinder注記メソッドを追加
  • を解決
  • Controllerクラス統合BaseControllerクラス(@InitBinderメソッド実装タイプ変換あり)
  • 記事リファレンス
  • spring mvc@InitBinderラベルを使用してフォームデータをバインド
  • @InitBinderの役割
    SpringMVCではbeanでDate,double,Integerなどのタイプが定義されており、フォームでコミットされたデータ(文字列)はエンティティオブジェクトに変換する属性にはなりませんので@InitBinderでデータ型変換を行う必要があります
    SpringMVCフォーム注入オブジェクトの実現原理
    ではspring mvcはフォームをバインドする前に、CustomBooleanEditor、CustomNumberEditorなどのエディタを登録します.もちろん、面倒でなければ、コントロールに単独で書くこともできます.
    Controllerクラスに@InitBinder注記メソッドを追加して解決
    package com.hb.goods.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.TimeZone;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.hb.goods.bean.Goods;
    import com.hb.goods.service.GoodsService;
    import com.hb.util.BaseController;
    
    @RestController
    @RequestMapping(value="/pssGoods")
    public class GoodsController extends BaseController{
    	
    	@Autowired
    	private GoodsService goodsService;
    	
    	/** *            ;     name             * @param goodsObj * @return */
    	@RequestMapping(value="/addGoods", method= {RequestMethod.GET})
    	public Map addGoods(Goods goodsObj) {
    		System.out.println(goodsObj.getGoodsName());
    		
    		goodsService.saveGoods(goodsObj);
    		Map hashMap = new HashMap();
    		hashMap.put("resultCode", 1);
    		return hashMap;
    // return "{resultCode: 1}";
    	}
    	
    	@RequestMapping( value = "/findByGoodsName/{goodsName}")
    	@ResponseBody
    	public List<Goods> findByGoodsName(@PathVariable("goodsName") String goodsName) {
    		List<Goods> list = goodsService.findGoodsByGoodsName(goodsName);
    		return list;
    	}
    	
    	/** * @InitBinder     ,   WebDataBinder       。 * WebDataBinder DataBinder   ,        JavaBean     。 * @param request * @param binder *         BaseController     */
    	@InitBinder
        protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));/*TimeZone  ,   8     */
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
        }
    }
    

    ControllerクラスにBaseControllerクラスを統合(@InitBinderメソッドによるタイプ変換あり)
    package com.hb.util;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import com.sun.beans.editors.*;
    
    public class BaseController {
    	@InitBinder  
        protected void initBinder(WebDataBinder binder) {  
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));  
    // binder.registerCustomEditor(int.class, new CustomNumberEditor(int.class, true)); 
            binder.registerCustomEditor(int.class, new IntegerEditor());  
    // binder.registerCustomEditor(long.class, new CustomNumberEditor(long.class, true));
            binder.registerCustomEditor(long.class, new LongEditor());  
            binder.registerCustomEditor(double.class, new DoubleEditor());  
            binder.registerCustomEditor(float.class, new FloatEditor());  
        } 
    }
    
    
    package com.hb.goods.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.TimeZone;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.hb.goods.bean.Goods;
    import com.hb.goods.service.GoodsService;
    import com.hb.util.BaseController;
    
    @RestController
    @RequestMapping(value="/pssGoods")
    public class GoodsController extends BaseController{
    	
    	@Autowired
    	private GoodsService goodsService;
    	
    	/** *            ;     name             * @param goodsObj * @return */
    	@RequestMapping(value="/addGoods", method= {RequestMethod.GET})
    	public Map addGoods(Goods goodsObj) {
    		System.out.println(goodsObj.getGoodsName());
    		
    		goodsService.saveGoods(goodsObj);
    		Map hashMap = new HashMap();
    		hashMap.put("resultCode", 1);
    		return hashMap;
    // return "{resultCode: 1}";
    	}
    	
    	@RequestMapping( value = "/findByGoodsName/{goodsName}")
    	@ResponseBody
    	public List<Goods> findByGoodsName(@PathVariable("goodsName") String goodsName) {
    		List<Goods> list = goodsService.findGoodsByGoodsName(goodsName);
    		return list;
    	}
    	
    }
    
    

    記事リファレンス
  • spring mvc@InitBinderラベルを使用してフォームデータをバインド
  • @InitBinderの役割
    SpringMVCではbeanでDate,double,Integerなどのタイプが定義されており、フォームでコミットされたデータ(文字列)はエンティティオブジェクトに変換する属性にはなりませんので@InitBinderでデータ型変換を行う必要があります
    SpringMVCフォーム注入オブジェクトの実現原理
    ではspring mvcはフォームをバインドする前に、CustomBooleanEditor、CustomNumberEditorなどのエディタを登録します.もちろん、面倒でなければ、コントロールに単独で書くこともできます.
    Controllerクラスに@InitBinder注記メソッドを追加して解決
    package com.hb.goods.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.TimeZone;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.hb.goods.bean.Goods;
    import com.hb.goods.service.GoodsService;
    import com.hb.util.BaseController;
    
    @RestController
    @RequestMapping(value="/pssGoods")
    public class GoodsController extends BaseController{
    	
    	@Autowired
    	private GoodsService goodsService;
    	
    	/** *            ;     name             * @param goodsObj * @return */
    	@RequestMapping(value="/addGoods", method= {RequestMethod.GET})
    	public Map addGoods(Goods goodsObj) {
    		System.out.println(goodsObj.getGoodsName());
    		
    		goodsService.saveGoods(goodsObj);
    		Map hashMap = new HashMap();
    		hashMap.put("resultCode", 1);
    		return hashMap;
    // return "{resultCode: 1}";
    	}
    	
    	@RequestMapping( value = "/findByGoodsName/{goodsName}")
    	@ResponseBody
    	public List<Goods> findByGoodsName(@PathVariable("goodsName") String goodsName) {
    		List<Goods> list = goodsService.findGoodsByGoodsName(goodsName);
    		return list;
    	}
    	
    	/** * @InitBinder     ,   WebDataBinder       。 * WebDataBinder DataBinder   ,        JavaBean     。 * @param request * @param binder *         BaseController     */
    	@InitBinder
        protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));/*TimeZone  ,   8     */
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
        }
    }
    

    ControllerクラスにBaseControllerクラスを統合(@InitBinderメソッドによるタイプ変換あり)
    package com.hb.util;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import com.sun.beans.editors.*;
    
    public class BaseController {
    	@InitBinder  
        protected void initBinder(WebDataBinder binder) {  
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));  
    // binder.registerCustomEditor(int.class, new CustomNumberEditor(int.class, true)); 
            binder.registerCustomEditor(int.class, new IntegerEditor());  
    // binder.registerCustomEditor(long.class, new CustomNumberEditor(long.class, true));
            binder.registerCustomEditor(long.class, new LongEditor());  
            binder.registerCustomEditor(double.class, new DoubleEditor());  
            binder.registerCustomEditor(float.class, new FloatEditor());  
        } 
    }
    
    
    package com.hb.goods.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.TimeZone;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.hb.goods.bean.Goods;
    import com.hb.goods.service.GoodsService;
    import com.hb.util.BaseController;
    
    @RestController
    @RequestMapping(value="/pssGoods")
    public class GoodsController extends BaseController{
    	
    	@Autowired
    	private GoodsService goodsService;
    	
    	/** *            ;     name             * @param goodsObj * @return */
    	@RequestMapping(value="/addGoods", method= {RequestMethod.GET})
    	public Map addGoods(Goods goodsObj) {
    		System.out.println(goodsObj.getGoodsName());
    		
    		goodsService.saveGoods(goodsObj);
    		Map hashMap = new HashMap();
    		hashMap.put("resultCode", 1);
    		return hashMap;
    // return "{resultCode: 1}";
    	}
    	
    	@RequestMapping( value = "/findByGoodsName/{goodsName}")
    	@ResponseBody
    	public List<Goods> findByGoodsName(@PathVariable("goodsName") String goodsName) {
    		List<Goods> list = goodsService.findGoodsByGoodsName(goodsName);
    		return list;
    	}
    	
    }