her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人!
博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。
今天来一篇前后端数据互传问题的总结。持续更新。我在开发时如果遇到就会记录。
前端传过来的是属于字符串类型,java是无法拿来直接存入数据库的,数据库datetime这的字段类型为timestamp。
2020-07-07 10:45:57这种类型,属于yyyy-MM-dd HH:mm:ss,考虑使用java的工具SimpleDateFormat函数。
- String DateTime=request.getParameter("DateTime");
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date Datetime = null;
- try {
- Datetime = formatter.parse(DateTime);
- } catch (ParseException e1) {
- e1.printStackTrace();
- }//string格式转Date格式
利用到spring-boot-starter-web中的依赖的com.fasterxml.jackson包
@JsonFormat
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
- private Date time;//下单日期
它的作用是,出参时,自动把Date型对象数据转化成正确的格式化后的字符串出去。
@JsonFormat不仅可以完成后台到前台参数传递的类型转换,还可以实现前台到后台类型转换。当content-type为application/json时,优先使用@JsonFormat的pattern进行类型转换。
- public class QueryPageBean implements Serializable{
- private Integer currentPage;//页码
- private Integer pageSize;//每页记录数
- private Map queryString;//查询条件
- }
我在这里用Map来装多个查询条件,
- @PostMapping("/getDeliveryOrderByCondition")
- public PageResult findDeliveryOrderByPage(@RequestBody QueryPageBean queryPageBean){
- PageResult pageResult = deliveryOrderService.pageQuery(
- queryPageBean.getCurrentPage(),
- queryPageBean.getPageSize(),
- queryPageBean.getQueryString()
- );
- return pageResult;
- }
通过输出封装的类型可以知道,@RequestBody底层会自动将对象中类型为Map的属性封装为java.util.LinkedHashMap类型的,那么Mapper在配置时,parameterType="java.util.LinkedHashMap"这样写,
- <select id="selectByCondition" parameterType="java.util.LinkedHashMap" resultMap="findByIdResultMap">
- select id,user_id as userId,time,product_info as productInfo,status,money,update_time as updateTime
- from product_delivery
- <where>
- <if test="status !=null and status !=''">
- and status = #{status}
- if>
- <if test="orderId !=null and orderId !=''">
- and id = #{orderId}
- if>
- where>
- select>
还有细节问题就是:
!=null和!=''之间不要加空格,还有中英文,大小写限制都比较严格,需要规范书写。