日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

前后台传参类型、格式不同,解决思路

發布時間:2024/9/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前后台传参类型、格式不同,解决思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路:

找類型轉換類工具、格式轉換類工具。

(1)可能需要寫在控制層,那就需要使用@InitBinder注解,優先加載其中內容;(更好,更完善的方法:將這些方法寫在BaseController類中(可以自己建個工具類),需要進行這類轉換的控制器只需繼承BaseController即可)

(2)可能需要用在get方法上面,需要使用相應注解,使參數進get之前,先進工具類進行處理。再進入get。

例子:

(1)從前臺表單所獲取的數據的時間格式與后臺所能處理的時間格式不同,而springMVC不能自動轉換,需要手動定義轉換。

具體問題:在swagger頁面中修改、添加數據后,若時間填寫2118-8-8這種格式,則報400狀態碼(無法理解請求的參數)。若改成2018/8/8這種形式,則可以成功寫庫。

解決方法:

//將后臺所能處理的日期格式從2018/8/8變成了2018-8-8 @InitBinderprotected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");simpleDateFormat.setLenient(false);CustomDateEditor dateEditor = new CustomDateEditor(simpleDateFormat, true);binder.registerCustomEditor(Date.class,dateEditor);}@ApiOperation(value = "更新人員")@ApiResponses(value = {@ApiResponse(code = 200, message = "updated")})@ApiImplicitParam(name="ryid",paramType="path",dataType="string",value="人員ID",required = true)@RequestMapping(value="update/{ryid}",method=RequestMethod.PUT)public void update(@PathVariable("ryid") String ryid,@ModelAttribute Ryb ryb){ryb.setRyid(ryid);rybService.update(ryid,HtglRybFactory.create(ryb));}@ApiOperation( "創建人員")@ApiResponses(value = {@ApiResponse(code = 201, message = "Created")})@RequestMapping(value="add",method=RequestMethod.POST)public void add( @ModelAttribute Ryb ryb ){if( rybService.add(HtglRybFactory.create(ryb)) != null ) {response.setStatus(HttpStatus.CREATED.value());}}

說明:

1)在控制層中方法之前添加粉色處代碼。即可。(會優先注冊這個編輯器)

2)效果:后臺能處理2118-8-8這種格式。但不能處理2018/8/8這種形式。

3)處理問題的思維歷程:通過debug找到問題的具體位置,鎖定具體原因。

如本例,在黃色熒光處打了斷點,發現在swagger添加、修改操作時,沒被斷點攔截就已經報錯。鎖定了數據沒傳過來的問題。同時,若不填寫時間數據,則添加、修改可以成功。鎖定問題是時間格式問題。

*優化:(目標:無論輸入2118-8-8這種格式,還是2018/8/8這種形式,均能成功寫庫)

創建工具類,如下

public class BaseController {@InitBinderprotected void initBinder(WebDataBinder binder) {binder.registerCustomEditor(Date.class, new MyDateEditor());}private class MyDateEditor extends PropertyEditorSupport {@Overridepublic void setAsText(String text) throws IllegalArgumentException {SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");Date date = null;try {date = format.parse(text);} catch (ParseException e) {format = new SimpleDateFormat("yyyy-MM-dd");try {date = format.parse(text);} catch (ParseException e1) {}}setValue(date);}} }

然后,讓需要進行格式轉換的類繼承這個工具類(如下圖)。即可。

public class RybRest extends BaseController{...}

(2)獲取數據庫數據,自定義其中的時間的格式。(使頁面顯示這個格式)

解決方法:

定義時間格式轉換工具類,

public class DateConvertUtil extends JsonSerializer<Date>{/*** @param value 表示要轉換的對象* @param gen 表示json串生成器* @param serializers json 串序列化提供者 (暫且不用關系)*/@Overridepublic void serialize(Date value,JsonGenerator gen,SerializerProvider serializers)throws IOException,JsonProcessingException {//1.創建日期轉換對象(如何保障如下對象每個線程有一份:了解ThreadLocal)SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");//2.將日期對象轉換為指定格式的字符串String dateStr=sdf.format(value);//3.將此字符串寫入到json串中 gen.writeString(dateStr);} }

在實體的get方法上面通過注解調用所定義的工具類。即可。

@JsonSerialize(using=DateConvertUtil.class) public Date getWrite_time() {return write_time;}

重點:

1)遇到bug的處理思想;

2)@InitBinder注解的使用;

附:(參考)

https://www.cnblogs.com/feng9exe/p/8036657.html

狀態碼

https://www.cnblogs.com/huhuixin/p/6823789.html

idea Debug快捷鍵

https://blog.csdn.net/zhangxiaoyang0/article/details/77896171

springMVC前臺傳遞日期類型到后臺

https://www.cnblogs.com/heyonggang/p/6186633.html

SpringMVC中利用@InitBinder來對頁面數據進行解析綁定

?

轉載于:https://www.cnblogs.com/duandians/p/9851690.html

總結

以上是生活随笔為你收集整理的前后台传参类型、格式不同,解决思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。