本文小编为大家详细介绍“如何使用Springboot接收前端Ajax发送的json”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Springboot接收前端Ajax发送的json”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
我们提供的服务有:网站制作、网站设计、微信公众号开发、网站优化、网站认证、甘南ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的甘南网站制作公司
通过 https://start.spring.io/ 获得项目框架。在eclipse中导入下载的Maven项目。
Maven添加fastjson依赖包
com.alibaba fastjson 1.2.62
定义Controller
@RestController public class GetJsonReq { @CrossOrigin @RequestMapping(value = "/simple") // json的结构和内部字段名称可以与POJO/DTO/javabean完全对应 public MapgetJsonBean(@RequestBody Beauty beauty) { Map result = null; if (beauty != null) { System.out.println("美女的名字:" + beauty.getName()); System.out.println("美女的年龄:" + beauty.getAge()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("美女出道日期:" + sdf.format(beauty.getDate())); System.out.println("美女的收入:" + beauty.getSalary()); result = new HashMap<>(); result.put("code", "1"); result.put("msg", "ok"); } return result; } @CrossOrigin @RequestMapping(value = "/complex") //json的结构较为复杂,不直接与POJO/DTO/javabean对应。 public Map getJsonComplex(@RequestBody JSONObject param) { Map result = null; if (param != null) { JSONObject master = param.getJSONObject("master"); Beauty beauty = (Beauty) JSONObject.toJavaObject(master, Beauty.class); System.out.println(beauty); JSONArray mm = param.getJSONArray("MM"); for (int i = 0; i < mm.size(); i++) { // 这里不能使用get(i),因为get(i)只会得到键值对。 JSONObject json = mm.getJSONObject(i); Beauty bt = (Beauty) JSONObject.toJavaObject(json, Beauty.class); System.out.println(bt); } result = new HashMap<>(); result.put("code", "1"); result.put("msg", "ok"); } return result; } }
POJO/DTO/JavaBean
注意Date字段要如何处理。
public class Beauty { private String name; private int age; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date date; private double salary; public Beauty() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Beauty [name=" + name + ", age=" + age + ", date=" + date + ", salary=" + salary + "]"; } }
将JSON转为Java对象使用@RequestBody 注解;将Java对象转换为JSON使用@ResponseBody注解。
一旦使用@ResponseBody注解返回流程将不在经过视图解析器,而是直接将数据写入到输出流中,通过response的body返回数据。如果处理请求方法返回的是 String 时@ResponseBody 注解不会进行 JSON 转换。响应的 Content-Type 为 text/plain;charset=ISO-8859-1。如果处理请求方法返回的是除了 String 类型以外的其他Object 类型时,@ResponseBody注解会进行 JSON 转换。响应的 Content-Type 为 application/json。
响应体的字符编码需要在@RequestBody 注解中设定:
//@RequestMapping(value = "/addUsers",produces = "text/plain;charset=utf-8") 返回String //@RequestMapping(value = "/addUsers",produces = "application/json;charset=utf-8") 返回json对象 @RequestMapping(value = "/addUsers",produces = MediaType.APPLICATION_JSON_VALUE+";charset=utf-8") @ResponseBody @CrossOrigin(origins ="http://localhost:8888") public Object addUsers(@RequestBody Users users)throws Exception{ System.out.println(users); return users; }
借助jQuery来发送Ajax请求。
发送json
这里要注意:
script标签引入js的形式必须是双标签,形如:
如果是形如