使用Restful风格中的post使用过遇到前端数据传送不到后端

问题描述:使用postman进行请求时候,前端的数据,一直在后端接收不到,找了好多资料,竟然是因为一个注解的原因。

后端接收设置:@[email protected]设置的原因

  因为spring中的ReqeustParam注解接收的参数来自于requestHeader中,即请求头中,也就是url中,格式为xxx?username=18&password=123,而ReqeustBody注解接收的参数则来自于requestBody中,即请求体中.

前端我使用的是Content-Type默认是

application/json;charset=UTF-8

而服务器是

‘Content-Type‘: ‘application/x-www-form-urlencoded‘

后端的一些常用的设置为:

一:

如果为get请求时,后台接收参数的注解应该为RequestParam,如果为post请求时,则后台接收参数的注解就是为RequestBody。附上两个例子,截图如下:

get请求

 @RequestMapping(value = "/anaData")
    public String selectOrderInfo(@RequestParam("method") String method, @RequestParam Map<String,Object> params) {
        LOG.debug(TextUtils.format("/***数据 分析模块,統計查詢 通用方法{0}**/", method));
        return analysisClientService.selectOrderInfo(method,params);
    }

post请求

 @PostMapping(value = "/center")
    public String requestApi(@RequestBody Map<String, Object> params){
        loger.debug(TextUtils.format("调用开始------"));
        return apiCenterClientService.requestApi(params);
    }

如果参数 有HttpServletRequest需要 注入可以用下面方式

在Controller中注入了HttpServletRequest,形式如下所示:

@RestController
public class AutowiredRequestController {

    @Autowired
    private HttpServletRequest request;
}

不会有线程安全问题!Controller层中所注入的HttpServletReuqest的实现类为JDK动态代理生成的一个代理类,从Request中获取值的时候是从ThreadLocal中得到的对象中的值。

@RequestParam
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

get方式中query String的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到

@RequestBody
处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

@RequestBody用于post请求,不能用于get请求

这里涉及到使用@RequestBody接收不同的对象
1. 创建一个新的entity,将两个entity都进去。这是最简单的,但是不够“优雅”。
2. 用Map<String, Object>接受request body,自己反序列化到各个entity中。
3. 类似方法2,不过更为generic,实现自己的HandlerMethodArgumentResolver。

当前台界面使用GET或POST方式提交数据时,数据编码格式由请求头的ContentType指定。分为以下几种情况:
1. application/x-www-form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute可以处理,@RequestBody也可以处理。
2. multipart/form-data,@RequestBody不能处理这种格式的数据。(form表单里面有文件上传时,必须要指定enctype属性值为multipart/form-data,意思是以二进制流的形式传输文件。)
3. application/json、application/xml等格式的数据,必须使用@RequestBody来处理。

在这里卡住了,卡的可难受了.留下这个,给自己长点记性

原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/11361320.html

时间: 2024-08-03 19:39:00

使用Restful风格中的post使用过遇到前端数据传送不到后端的相关文章

Restful风格API接口开发springMVC篇

Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put...等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口. 在Restful风格中,现

restful风格,restcontroller与controller

初步接触springmvc的时候,被要求使用restful风格,彼时一头雾水,不懂何谓restful,参阅了很多资料,慢慢的接触的也越来越多,如今spring的况且已基本运用熟练,简单谈一下我的一些看法,当然,只是我自己的浅显粗陋的见解,不对的地方还望指正. restful风格 简单的理解,restful是一种url风格,或者说是规范,在以前的网址中,假定一个业务,取得数据网址为http://test/get,添加信息的网址为http://test/post,类似这样. 但是在restful风格

RESTful风格、异常处理、Spring框架

1.RESTful风格 什么是RESTful风格? REST是REpressentational State Transfer的缩写,中文翻译为表述性状态转移,REST是一种体系结构,而HTTP是一种包含了REST架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分: 表述性(REpressentational):REST资源实际上可以用各种形式来进行表述,包括XML.JSON.甚至HTML--最适合资源使用者的任意形式: 状态(State):当时用REST的时候,我们更关注资源的

restful风格接口和spring的运用

Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put...等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口. 在Restful风格中,现

SSM框架中RESTful风格的实现

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的. 如果一个架构符合REST原则,就称它为RESTful架构. REST,即Representational State Transfer的缩写,我对这个词组的翻译是"表现层状态转化".它是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 对于资源的具体操作类型,由HTT

Yii2实现RESTful风格的API中要注意的坑

Yii2实现RESTful风格的API的流程如下:1.WEB前端(frontend)和后端(backend)的同级目录,新建一个文件夹,命名api,api中文件完全复制一份原始的backend中文件即可 2.需要修改common\config\bootstrap.php文件,对新建的应用增加alias别名 Yii::setAlias('@api', dirname(dirname(DIR)) . '/api'); 3.保证你的web服务器开启rewrite规则!配置apache或nginx!这里

springMvc中restful风格的api路径中把小数点当参数,SpringMvc中url有小数点

在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping("/findByIp/{ip:.+}") public Object test(@PathVariable String ip) { System.out.println(ip); return ""; } 但这种方式在web服务中感觉太过于鸡肋 所以在springMvc.

Spring Boot 中 10 行代码构建 RESTful 风格应用

RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 RESTful 提供了很好的支持,常见的相关注解有: @RestController @GetMapping @PutMapping @PostMapping @DeleteMapping @ResponseBody ... 这些注解都是和 RESTful 相关的,在移动互联网中,RESTful 得

拦截器中获取restful风格参数

controller层: @GetMapping(value = "/api/users/{device}") public ResultDO get(@PathVariable("device") String device){ *** } 拦截器中: public class ParameterInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpSe