最近刚去一个公司实习感觉什么都不会,但是你不会不代表别人不布置任务。由于某个接口没有访问权限,老大让我模拟一个接口对post请求作出应答,期间也碰到很多问题。看了网上好多教程最后在同事的帮助下调试出来了,不说这个问题有多难,只是想保持一个好习惯把不会的记录下来,这也是一种学习方式吧!
因为刚去好多不会,但是同事很给力竭力帮我解决,他写了一个前端页面方便我测试
1.前端

<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body><script type="text/javascript">
function post(){var postData = {"type":2,"beginTimeStr":"2019-10-22 11:37:27","coordinateX":108.53391637311535,"coordinateY":22.949932550572253,"affectDistance":500,"leakType":20170707001001,"affectLevel":1,"barrierLevel":1,"leakPage":"uva/uvaImag/leakPages/2019-10-22/1909090902_101.jpg","constructCompany":"中国","constructPerson":"李丽","conCall":"13800138000","conContent":"有隐患","conPattern":20170704001001,"userName":"suqiang","leakName":"施工2019-10-22"};var xhr = new XMLHttpRequest();xhr.open("POST", "http://localhost:8080/cable/interfaceUVA/saveUVALeakData.action", true);//xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.setRequestHeader("Content-type","application/json");xhr.setRequestHeader("dataType","jsonp");xhr.setRequestHeader("crossDomain","true");xhr.onreadystatechange = function(){var XMLHttpReq = xhr;if (XMLHttpReq.readyState == 4) {if (XMLHttpReq.status == 200) {                var data = XMLHttpReq.responseText;alert(data)console.log(data);//var json = JSON.parse(JSON.parse(data));}else if(XMLHttpReq.status == 100){}else if(XMLHttpReq.status == 300){}else if(XMLHttpReq.status == 400){}else if(XMLHttpReq.status == 500){}else if(XMLHttpReq.status == 0){}}};xhr.send(JSON.stringify(postData));
}</script><input type="button" value="触发请求" onclick="post()" style="width:100px;height:100px;font-size:30px"/></body>
</html>

2.后台
springboot目录结构

实体类SaveUVALeakData:

package pojo;public class SaveUVALeakData {private Integer type;private String leakName;private double coordinateX;private double coordinateY;private String beginTimeStr;private Long affectDistance;private Long leakType;private Integer affectLevel;private Integer barrierLevel;private String leakPage;private String constructCompany;private String constructPerson;private String conCall;private String conContent;private Long conPattern;private String userName;@Overridepublic String toString() {return "SaveUVALeakData{" +"type=" + type +", leakName='" + leakName + '\'' +", coordinateX=" + coordinateX +", coordinateY=" + coordinateY +", beginTimeStr='" + beginTimeStr + '\'' +", affectDistance=" + affectDistance +", leakType=" + leakType +", affectLevel=" + affectLevel +", barrierLevel=" + barrierLevel +", leakPage='" + leakPage + '\'' +", constructCompany='" + constructCompany + '\'' +", constructPerson='" + constructPerson + '\'' +", conCall='" + conCall + '\'' +", conContent='" + conContent + '\'' +", conPattern=" + conPattern +", userName='" + userName + '\'' +'}';}
}

HelloWorldCotroller 类:

package com.example.demo.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import pojo.PhotoFiles;
import pojo.SaveUVATaskData;
import pojo.UVATaskData;
import pojo.SaveUVALeakData;import javax.validation.Valid;@Controller
public class HelloWorldCotroller {//接口3@CrossOrigin(origins = "*", maxAge = 3600)//跨请求域配置//@PostMapping(value="/cable/interfaceUVA/saveUVALeakData.action",produces = "application/json;charset=UTF-8")@RequestMapping(value="/cable/interfaceUVA/saveUVALeakData.action",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")@ResponseBodypublic String saveUVALeakDat(@RequestBody SaveUVALeakData saveUVALeakData){System.out.println(saveUVALeakData.toString());return "success";}
}

在上面中我遇到的问题有:(1)@CrossOrigin(origins = “*”, maxAge = 3600),开始没有加这个跨域请求;
(2) public String saveUVALeakDat(@RequestBody SaveUVALeakData saveUVALeakData) 中没有加@RequestBody,在前端页面中如果Content-type的类型为"application/json",需要使用@RequestBody;
(3)开始也忘了加produces = “application/json;charset=UTF-8”;
启动springboot,如下图所示启动成功

运行前端测试页面,点击触发请求,在后台控制台可以看到返回的数据

借鉴文章:
https://blog.csdn.net/w_linux/article/details/81142413
https://blog.csdn.net/feiyst/article/details/88431621

2.反序列化
实体类:

package pojo;import com.fasterxml.jackson.annotation.JsonProperty;import java.util.List;
import java.util.Map;public class SaveUVATaskData {@JsonProperty(value="type")   //对应前端请求的typeprivate Integer type;@JsonProperty(value="taskId")//对应前端请求的taskIdprivate Long taskId;private List<Map<String,Object>> photoFiles;public Integer getType() {return type;}public void setType(Integer type) {this.type = type;}public Long getTaskId() {return taskId;}public void setTaskId(Long taskId) {this.taskId = taskId;}public List<Map<String, Object>> getPhotoFiles() {return photoFiles;}public void setPhotoFiles(List<Map<String, Object>> photoFiles) {this.photoFiles = photoFiles;}@Overridepublic String toString() {return "SaveUVATaskData{" +"type=" + type +", taskId=" + taskId +", photoFiles=" + photoFiles +'}';}
}

控制类:

package com.example.demo.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import pojo.SaveUVATaskData;
import pojo.SaveUVALeakData;@Controller
public class HelloWorldCotroller {//接口1接收无人机巡检轨迹@CrossOrigin(origins = "*", maxAge = 3600)//跨越请求配置@ResponseBody@RequestMapping(value="/cable/interfaceUVA/saveUVATaskData.action",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")public String saveUATData(@RequestBody SaveUVATaskData saveUVATaskData){System.out.println(saveUVATaskData.toString());
//       System.out.print(saveUVATaskData.getPhotoFiles().toString());//创建ret对象JSONObject ret=new JSONObject();ret.put("msg","");ret.put("success",true);//创建Json对象JSONObject jsonObject=new JSONObject();jsonObject.put("ret",ret);return jsonObject.toString();}

是需要在实体类SaveUVATaskData中给属性加上 @JsonProperty(value=“type”) //对应前端请求的type
private Integer type;
@JsonProperty(value=“taskId”)//对应前端请求的taskId
private Long taskId;

springboot中实体类接收post请求、反序列化相关推荐

  1. form表单提交,后台实体类接收转义问题

    问题:前台表单用ajax提交,data为validateForm.serializeArray(),后台用实体类接收参数,&符号被转义为&但是从request中直接取值是没问题的,请问 ...

  2. html表单c 后台如何接受,前台提交整个表单数据,后台实体类接收

    function su() { var formData=$("#form").serializeObject(); //这个把表单按对象类型序列化 $.ajax({ url: ' ...

  3. form表单提交,后台实体类接收转义问题 解决方案

    Ajax传一个实体给后台,以@RequestBody来接收: https://blog.csdn.net/zhou_pp/article/details/94738434 前台提交整个表单数据,后台实 ...

  4. Spring中实体类为什么不需要注册成bean?

    今天偶然想到一个问题,Spring中实体类为什么不需要注册成bean? 要理解为什么不用注入,首先就清楚注入的目的是什么?如果不注入,在程序中要使用某个类对象的方法,则需要去new一个对象.然后我们调 ...

  5. Java SpringBoot Rest请求Post传实体类接收不到值的问题

    今天在测试REST请求的时候出现一个问题,不管怎么修改,方法断点可以进,但是接收不到值,试了很多方法,如修改请求方式.修改请求内容.修改请求头,修改后端接收类型等等都没有效果,最后想到一个办法,将参数 ...

  6. SpringBoot中@GetMapping参数接收理解

    SpringBoot用实体接收Get请求传递过来的多个参数(绝对可用)_b_just的博客-CSDN博客_springboot 接收多个参数 当参数为基本类型时 @GetMapping("/ ...

  7. 后端实体类接收数组_三级联动返回数组的方式

    上一章发现编辑会出现所属分类不显示的现象~ 在这里从主页面查到修改的按钮,发现调用子页面init()方法,加上查询完整的路径信息: 前台需要返回一个catelogPathd的数组,这时候需要在后台的实 ...

  8. idea中实体类右击没有ptg_这些6到飞起的idea插件,你还没用过?

    工欲善其事,必先利其器. 小码仔今天为大家分享的这些idea插件都是自己在开发实战中一直使用的一些插件,真的是溜到起飞,非常的好用. 1.Alibaba Java Coding Guidelines ...

  9. java中实体类中实现Serializable接口的作用

    在开发中 我们看到实体类实现 Serializable接口 还会写上下面一句话 private static final long serialVersionUID = 1L; 它的作用是实现序列化与 ...

最新文章

  1. html语言怎么那么难用,css语言难学吗?
  2. 优化你的DiscuzNT3.0,让它跑起来(4)asp.net 缓存和死锁
  3. 中国进口消费市场研究报告2020
  4. 设计模式:代理模式(C++)【代理服务器案例】
  5. 计算机网络技术与应用应用题,计算机网络技术与应用题库答案.pdf
  6. (转载)Cocos2dx-OpenGL ES2.0教程:初识MVP(3)
  7. android限制第三方应用安装软件,如何从Android中的未知来源安装应用程序 | MOS86...
  8. Shell脚本编程之(三)执行方式差异(source, sh script, ./script)
  9. 【分享】微信H5游戏制作教程,用唤境引擎轻松开发微信AVG小游戏
  10. 计算机中英文打字文章,中英文混合打字文章
  11. nas918+支持的cpu_C2000浮点运算注意事项——CPU和CLA的差异及误差处理技巧
  12. Server2008如何卸载MySQL_「完美卸载」完美卸载SQL Server 2008 R2 的方法,适合所有问题 - seo实验室...
  13. java 多余的空格_Java去除字符串多余空格以及首尾空格
  14. pptpd linux centos7,centos7配置pptpd
  15. node.js+puppeteer创建定时任务自动登录网站截取图片
  16. Xilinx公司的Vivado 2022.2版本在Windows和Linux系统上的下载配置教程
  17. centos8 修改root密码
  18. 设置控件评分星星控件
  19. 烤仔喊你写作业 | 今天你做出来了吗?
  20. route和bridge是什么意思_请问ROUTE 和 BRIDGE 是怎么分别的!

热门文章

  1. centos lvm卷组删卷和扩容
  2. Android第三方视频加载框架JCVideoPlayer
  3. 软件是一种艺术,汽车是一种工程
  4. 翻译之:数据页面和数据行
  5. c语言printf显示变量,零基础学C语言 笔记一 变量 printf
  6. Windows 无法连接到打印机.打印后台程序服务没有运行
  7. Open mv识别三角形的办法
  8. skfuzzy.cmeans与sklearn.KMeans聚类效果对比以及使用方法
  9. 【Excel使用技巧】Excel数据导入sql
  10. CV7 颜色追踪和图像阈值