思路:

找类型转换类工具、格式转换类工具。

(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

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

  1. JavaScript传参年月日格式日期自动运算问题解决

    JavaScript传参年月日格式日期自动运算问题解决 在javaScript中用ajax传递2020-10-07格式参数时,发现内部进行了运算 最终解决之后的效果 解决方法:利用转义字符和" ...

  2. vue axios传参报错的解决方法

    为什么jquery和axios用法类似,但是请求时传参类型却不同? jquery默认 form Data(如:url?a=1形式): 因为jquery在执行post请求时,会默认设置Content-T ...

  3. C语言编译报错:incompatible pointer type [-Wincompatible-pointer-types](传参类型不匹配)

    代码: //arnold add 20211213size_t save_video_box_buffer_size = 1920*1080*3/2;char* save_video_box_buff ...

  4. ios请求头解决参数中文乱码_花了一天时间就解决了一个的请求头传参参数格式bug...

    一天的时间就解决了一个bug就这么过去了,但不能让他就这么过去了,加班要加的有价值,所以现在记录一下这一天的经历,以防下次再踩坑 大致说下我的情况,入坑的不久的前端新手,在做一个项目的重构,用的框架式 ...

  5. 【JS】url传参中文乱码的解决方法

    1.escape 和 unescape escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值. 采用unicode字符集对指定的字符串除0-255以外进行编码.所有 ...

  6. 安装wps导致 application/kset 上传文件类型报错解决办法

    电脑中安装wps上传execl时,上传.xls文件时 报错 application/kset 文件类型不正确 打印array() print_r($_FILES ) 结果如下: Array ( [us ...

  7. ElementUI中el-time-picker实现选择时间并格式化显示和传参的格式

    场景 要实现在前端选择一个一天中的时间并传递到后端. 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程 ...

  8. python密码传参有特殊字符如何解决_am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符的解决方案...

    一.am start的内容的整理 主要包含以下内容:am start的常规操作及参数的含义,-d 参数的含义,以及如何在APK中设置参数获取 使用命令如下:adb shell am start -n ...

  9. mysql入参映射_Mybatis中的Mapper映射Sql中传参类型(如Bean,基本类型,List...)与取值的方式 与foreach的几种用法!!...

    附加:mybatis配置文件 /p> "http://mybatis.org/dtd/mybatis-3-config.dtd"> View Code 附加:测试文件 ...

最新文章

  1. Python 多进程开发与多线程开发
  2. 史上最强:numpy实现全部机器学习算法
  3. 折半查找的思想及源码_结构与算法(04):排序规则与查找算法
  4. redis内存行数据库细节
  5. 简单三层架构(登录)
  6. signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
  7. 计算机展望未来网络形态,在学习中展望未来
  8. Laravel核心解读--异常处理
  9. 赋值运算符(AssignmentOperator)
  10. 信息系统服务器(机柜)鉴定表,机房建设标准及管理规范
  11. win10卸载程序灾难性故障_win10新建文件夹出现0X8000FFFF:灾难性故障的错误提示解决方法...
  12. 论一个程序猿的自我修养!
  13. 2022.11.28 英语背诵
  14. 云计算工程师必备技能图谱
  15. 笔记本外接显卡坞死机/键盘鼠标卡死问题的解决
  16. 【预测模型】基于RLS算法求解数据预测matlab代码
  17. 《C语言程序设计》江宝钏主编-习题6-1-温度转换
  18. OpenStack云计算与HPC之一: 前言和OpenStack与HPC虚拟化
  19. 管理计算机 ppt,PowerPoint(PPT) 2016
  20. 数据流和数据报的理解(转载)

热门文章

  1. 台式机计算机删除,电脑c盘满了怎么清理 电脑c盘可以删除哪些文件
  2. 天才基本法_强推|高人气合集狙击蝴蝶天才基本法春日玛格丽特难哄
  3. html 三级目录索引,墨涩网 - HTTP Web服务器索引目录列表程序Directory Lister——墨涩网...
  4. 【sprinb-boot】lib分离打包
  5. android mock测试资源,Android 单元测试 --Mock 及 Mockito
  6. awx文件解析_Android so(ELF)文件解析
  7. springboot 注解动态赋值_java springboot动态给注解属性参数赋值
  8. python词云图代码示例 无jieba_【词云图】如何用python的第三方库jieba和wordcloud画词云图...
  9. python排序算法实现_十大排序算法python实现
  10. python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)