解决Springboot PostMapping无法获取数据的问题


Posted in Java/Android onMay 06, 2022

PostMapping无法获取数据问题

在使用SpringBoot的PostMapping注解的时候,发现无法获取数据(get方法可行),经过一番查证,发现需要添加新的注解

举例如下

    //接受单个参数,使用RequestParam,并且添加上name属性,保证前后端的参数名称一致
 
    @PostMapping(value = "/users")
    public RestfulResponse postUser(@RequestParam("id") Integer id,         @RequestParam("username") String username, @RequestParam("password") String password) {
        User user = new User(id, username, password);
        //User user = new User(1,"tom","123123");
        System.out.println(id + "----" + username);
            restfulResponse = new RestfulResponse(true,200,"查询成功", null);
        return restfulResponse;
    }
    //接受一个实体类,要使用RequestBody 注解
    @PostMapping(value = "/getuser")
    public RestfulResponse postUser1(@RequestBody User user) {
        restfulResponse = new RestfulResponse(true,200,"查询成功", user);
        return restfulResponse;
    }

Springboot之PostMapping 

@PostMapping

映射一个POST请求

Spring MVC新特性

提供了对Restful风格的支持

@PostMapping(value = "/user/login")
//等价于
@RequestMapping(value = "/user/login",method = RequestMethod.POST)

扩展

  • @GetMapping,处理get请求
  • @PostMapping,处理post请求
  • @PutMapping,处理put请求
  • @DeleteMapping,处理delete请求

@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

属性

  • value:指定请求的实际地址
  • method:指定方法类型,get、post、put、delete等
  • consumes:指定处理请求的提交内容类型,如application/json, text/html;
  • produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • params: 指定request中必须包含某些参数值是,才让该方法处理。
  • headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

value/method示例

@Controller
@RequestMapping("/appointments")
public class AppointmentsController {
    private AppointmentBook appointmentBook;
    
    @Autowired
    public AppointmentsController(AppointmentBook appointmentBook) {
        this.appointmentBook = appointmentBook;
    }
    @RequestMapping(method = RequestMethod.GET)
    public Map<String, Appointment> get() {
        return appointmentBook.getAppointmentsForToday();
    }
    @RequestMapping(value="/{day}", method = RequestMethod.GET)
    public Map<String, Appointment> getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) {
        return appointmentBook.getAppointmentsForDay(day);
    }
    @RequestMapping(value="/new", method = RequestMethod.GET)
    public AppointmentForm getNewForm() {
        return new AppointmentForm();
    }
    @RequestMapping(method = RequestMethod.POST)
    public String add(@Valid AppointmentForm appointment, BindingResult result) {
        if (result.hasErrors()) {
            return "appointments/new";
        }
        appointmentBook.addAppointment(appointment);
        return "redirect:/appointments";
    }
}

value的uri值为以下三类:

A) 可以指定为普通的具体值;

B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);

C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner"; 
}
@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")
  public void handle(@PathVariable String version, @PathVariable String extension) {    
    // ...
  }
}

cousumes的样例:

@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {    
    // implementation omitted
}

params的样例:

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
  @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted
  }
}

headers的样例:

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted
  }
}

Tags in this post...

Java/Android 相关文章推荐
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
详解Java实践之建造者模式
Jun 18 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
每日六道java新手入门面试题,通往自由的道路
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
关于springboot 配置date字段返回时间戳的问题
Jul 25 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
一文搞懂Java中的注解和反射
Jun 21 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
Sep 23 Java/Android
java版 联机五子棋游戏
Java版 简易五子棋小游戏
java版 简单三子棋游戏
May 04 #Java/Android
Java 定时任务技术趋势简介
Java版 单机五子棋
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 #Java/Android
Spring Boot 实现 WebSocket
You might like
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
javascript options属性集合操作代码
2009/12/28 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
解析window.open的使用方法总结
2013/06/19 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
小程序实现多选框功能
2018/10/30 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Python图算法实例分析
2016/08/13 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python conda操作方法
2019/09/11 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
时尚圣经:The Fashion Bible
2019/03/03 全球购物
港湾网络笔试题
2014/04/19 面试题
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
一条慢SQL语句引发的改造之路
2022/03/16 MySQL