Rest使用中的一些坑

floodlight控制器中通过REST API下发流表遇到的坑 floodlight version 不同会影响REST API 的写法:floodlightV1.0以上按这个规范写REST API ADD/DEL形式 : /wm//jsonmaster 分支时候 module 值为:staticentrypusher形式为curl -X POST -d '{"switch":"00:00:00:00:00:00:00:01", "name":"flow-m 阅读详情

1. Rest最佳场景

Rest最佳实践,Json作为通信载体
在这里插入图片描述
在这里插入图片描述

2. Rest应用场景

如下3个场景中,主要讨论,在请求 Put Delete 时:如何正确请求 如何正确传参

情景1:发送Post请求,中途转为Put Delete
浏览器本身只支持 get 和 post 请求,作为客户端,使用Rest时,如果需要发送 put 和 delete 请求,则:
在这里插入图片描述
<!-- 1. 对于tomcat请求依然是post,对于Handler是Put -->
<form action="${pageContext.request.contextPath}/rest04/users" method="post">
    <input type="hidden" name="_method" value="put">
    <input type="hidden" name="id" value="1">
    <input type="text" name="name" value="zhj">
    <input type="text" name="gender" value="true">
    <input type="text" name="birth" value="2019-12-12">
    <input type="submit" value="修改">
</form>
<!-- 2. 设置此过滤器,作用:
        如果当前请求是Post,则获取请求中的"_method"参数值,并将请求的method转换为对应值。
 		即转换了请求的method
-->
<filter>
    <filter-name>httpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>httpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
// 3. 定义domain
public class User {
    private Integer id;
    private String name;
    private Boolean gender;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
}
// 4. 定义Handler,正常接收参数!!!!!
@RequestMapping(value="/users",method = RequestMethod.PUT)
@ResponseBody
//正常接收即可,因为此时发送的依然是post请求,tomcat已经获取到参数
public MyRequestStatus updateUser(User user) {
    System.out.println("update One user2:"+user);
    MyRequestStatus status = new MyRequestStatus("update", "ok");
    return status;
}

情景2:直接发送Put Delete请求

tomcat不处理put请求的请求体,其中参数不接收

var xhr = new XMLHttpRequest(); 
xhr.open("put","${pageContext.request.contextPath}/rest04/users");//ajax发送正常的put请求
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
xhr.send("id=1&name=zhj&gender=true&birth=2019-12-12");//携带参数
// 2. 定义domain
public class User {
    private Integer id;
    private String name;
    private Boolean gender;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
}
// 3.定义Handler,此时无法接收到请求参数!!!!!
@RequestMapping(value="/users",method = RequestMethod.PUT)
@ResponseBody
public MyRequestStatus updateUser(User user) {//此时无法接收到请求参数!!!!
    System.out.println("update One user2:"+user);
    MyRequestStatus status = new MyRequestStatus("update", "ok");
    return status;
}
<!-- 解决方案:
     如果Put请求中的 ”id=1&name=zhj&...“ 含有如此参数,则可以配置如下过滤器
     其作用:如果发现当前请求是Put请求,会将请求体中的请求参数获取出来,供后续使用。
-->
<filter>
    <filter-name>put</filter-name>
    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>put</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

情景3:直接发送Put请求,但携带Json格式数据参数

var xhr = new XMLHttpRequest(); 
xhr.open("put","${pageContext.request.contextPath}/rest04/users");//ajax发送正常的put请求
xhr.setRequestHeader("content-type","application/json");
xhr.send('{"id":1,"name":"zhj","gender":true,"birth":"2019/12/12"}');//携带Json数据参数
public class User {
    private Integer id;
    private String name;
    private Boolean gender;
    @JsonFormat(pattern = "yyyy/MM/dd")
    private Date birth;
}
@RequestMapping(value="/users",method = RequestMethod.PUT)
@ResponseBody
public MyRequestStatus updateUser(@RequestBody User user) {//通过@RequestBody收参!!!!
    System.out.println("update One user2:"+user);
    MyRequestStatus status = new MyRequestStatus("update", "ok");
    return status;
}

3. RestComponent

RestFul Controller

资源:用户  /users   GET  POST  PUT
     某一个用户   /users/{id}  GET  DELETE
     分页用户  /users/{pageNum}/{pageSize}  GET

@Controller
public class RestController {
    @GetMapping("/users")
    @ResponseBody
    public List<User> queryAllUsers(){//查询所有用户
        System.out.println("get");
        List<User> users = ....
        return users;
    }

    @PostMapping("/users")
    public String addUser(User user){//增加用户
        System.out.println("Post user :"+user);
        return "index";
    }
	
	//更新用户
    @PutMapping("/users")
    public String updateUser(@RequestBody User user){
        System.out.println("Put user" user:"+user);
        return "index";
    }
    
    // 查询id为x的用户
    @GetMapping("/users/{id}")
    public String queryOneUser(@PathVariable Integer id){//@PathVariable 接收路径中的值
        System.out.println("Get user id:"+id);
        return "index";
    }
    
    //删除用户
    @DeleteMapping("/users/{id}")
    public String deleteOneUser(@PathVariable Integer id){//@PathVariable 接收路径中的值
        System.out.println("delete user id:"+id);
        return "index";
    }

    // 查询分页用户
    @GetMapping("/users/{pageNum}/{pageSize}")
    @ResponseBody
    public List<User> queryAllUsers(@PathVariable Integer pageNum,@PathVariable Integer PageSize){
        System.out.println("get");
        List<User> users = ....
        return users;
    }
}
通过薄膜太阳能电池中的热激电流量化陷阱状态 发光(led)和光伏(PV)器件的性能取决于光活性半导体材料的质量。由于材料杂质或在制造过程中在半导体材料中无意地引入缺陷,导致偏离最佳性能。这些缺陷被称为阱态,或简称“阱”,它是半导体带隙内的高能态。一般来说,陷阱的发生可能是由于材料杂质(在散装)或在不同材料层之间的界面。在有机半导体中,由于天然物质的无序性,阱态经常出现。在无机和杂化半导体(例如:杂化钙钛矿、硅……)中,晶界的存在是圈闭态的已知来源。由于陷阱产生的原因多种多样,它们对装置的影响也是多种多样的。由于载流子的多次捕获和释放事件,特别是浅阱的 阅读详情

相关推荐

保姆级教程:用YOLOv8/9/10搞定仪表盘指针识别,附完整数据集和Python环境配置

本文提供了一份基于YOLOv8/v9/v10的仪表盘指针检测全流程指南,涵盖环境配置、数据集构建、模型选型、训练调优和部署落地等关键步骤。通过详细的代码示例和实战经验,帮助开发者高效解决工业视觉中的仪表盘检测难题,特别适合电力巡检、智能监控等应用场景。

weixin_29031057的博客 1335

restful规范

一、restful介绍 1、web服务交互   网站提供的每个web服务都需要前后端交互,前后端交互的实现方案,通常叫作:web服务交互方案。 (1)目前主流的三种web服务交互方案   1)REST(Representational State Transgfer)表述性状态转移   REST是Roy Thomas Fielding博士于2000年在他的博士论文里提出来的。 ...

anmi3721的博客 989

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)

本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。

weixin_29062671的博客 630

RESTful风格API详解

在学习RESTful 风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题?有什么应用场景?听完下面描述我想你就会明白: 在互联网并没有完全流行的初期,移动端也没有那么盛行,页面请求和并发量也不高,那时候人们对接口的要求没那么高,一些动态页面(jsp)就能满足绝大多数的使用需求。 但是随着互联网和移动设备的发展,人们对Web应用的使用需求也增加,传统的动态页面由于低效率而渐渐被HTML+JavaScript(Ajax)的前后端分离所取代,并且安卓、IOS、小程序等形式客户端层出不穷,客户端的

tc979907461的博客 4619

Camera metadata

Camera metadata

weixin_42136255的博客 2529

气象大模型光伏功率预测中的应用:从短期,超短期,中长期的实现与开源代码详解

本文详细介绍了基于大模型的光伏功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)预测。文章首先讨论了数据准备与预处理,包括历史功率、气象、天文和电站特性数据的收集与特征工程。随后,针对不同预测需求,提出了多种深度学习模型:超短期预测采用1DCNN-LSTM混合模型,短期预测使用Transformer模型,中长期预测则通过多尺度特征提取模型和概率预测方法处理不确定性。文章还提供了模型训练、评估、部署和优化的完整流程,并开源了代码实现。未来研究方向包括结合数值天气预报、开发时

专注AI大模型,软件混淆,授权 1576

RESTful

一、RESTful RESTful,一种通用的前后台交互方式 RESTful一般是指这种格式: (1)使用HTTP POST(或GET)进行数据交互 (2)请求数据和应答数据均为JSON格式(或XML) 二、RESTful接口的实现 RESTful的前端实现 前端:在发送请求时,把请求转成JSON字符串 $.ajax({ type:"POST", /*请求类...

给你更好的 3万+

基于 Simulink 的双向 DC/AC 逆变器中 IGBT/MOSFET 寄生参数影响分析实战教程

摘要:本教程详细解析了Simulink中IGBT/MOSFET寄生参数对双向DC/AC逆变器的影响。通过对比理想模型与含寄生参数(如20nH内部电感、50nH回路电感)的仿真,揭示了电压尖峰、高频振荡等实际问题。建模步骤包括搭建基准电路、引入寄生参数、配置高精度求解器(步长10ns),并给出抑制措施:添加RC缓冲电路、调整驱动电阻。关键发现:寄生参数会显著增加开关损耗和EMI噪声,需通过参数扫描优化设计。教程还提供了代数环报错、仿真速度优化等实战技巧,帮助工程师从理想仿真过渡到高保真分析。

xiaoheshang_123的博客 68

rest_framework学习(一)resful规范介绍及Django的CBV介绍

一、什么是resful规范 resful是一种规范,它是一种面向资源编程的规范,操作只是一种请求方式。 二、规范内容 1.API与用户的通信协议,总是使用HTTPs协议:https比http安全 2.域名 https://api.example.com 尽量将API部署在专用域名(会存在跨域问题) https://example.org/api/ API很简单 例如写一个查询所有图书的a...

wuliwawa的博客 711

走向审计4.0:内部审计数字化转型的路径与方法

企业的内部审计人员可以以数字化为手段,建立内部审计新生态,在数字化过程中引进战略审计、服务审计、开放审计、敏捷审计、数字审计、智慧审计等理念、方法和工具,完成数智生态审计转型。内部审计的审计对象远比国家审计和公众审计丰富和多元化,理论上企业经营管理和日常操作的各个方面都可以成为内部审计的对象,此外还可以开展独立咨询活动。由于内部审计的数字化或数字化的内部审计是实现审计数字化转型的必要条件,是实现“数字引领、数据强审”目标的核心手段,因此企业内部审计部门势必要投入足够的资金和人才来打造一支数字化审计新队伍。

一键难忘的博客 6737

基于Simulink的电力电子系统电磁兼容性(EMC)仿真

在电力电子系统中,由于高频开关器件的存在,会产生大量的电磁干扰(EMI),这对系统的稳定性和可靠性提出了挑战。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电力电子系统的电磁兼容性。本教程将详细介绍如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。通过本教程,我们详细介绍了如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。为了模拟电力电子系统中的电磁干扰(EMI),我们需要添加噪声源模块。为了更好地分析系统的电磁兼容性特性,可以在模型中添加频谱分析工具。

amy_mhd的博客 1126

RestFul简介和使用

2. RestFul简介和使用 2.1 RestFul简介 REST全称是(Resource) Representational State Transfer,翻译过来为“资源代表状态转移”,中文意思是表述性状态转移。它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构

qq_50313418的博客 1万+

【LDPC-7】LLR量化位宽对LDPC译码性能的影响分析——以最小和译码算法为例进行matlab仿真

最小和译码算法的步骤如下:最后译码结果如果满足或者完成所有迭代次数,则译码算法停止迭代,否则继续进行译码迭代操作。

FPGA/MATLAB学习教程/源码/项目合作开发 1471

airflow 安装插件REST API以及踩过的坑

1.安装部署: 1.在airflow.cfg配置文件下面追加 [core] plugins_folder = /home/{USER_NAME}/airflow/plugins 注:airflow目录前面是airflow所在的目录的绝对路径 2.在airflow目录下面,新建plugins目录 mkdir plugins 3.下载安装包 wget https://github.com/teamclairvoyant/airflow-rest-api-plugin/archive/master.zip

weixin_43202081的博客 1569

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关于Dubbo支持rest的一个坑

踩坑过程: 上午整了个Zookeeper注册中心【参考https://blog.youkuaiyun.com/weixin_42465125/article/details/87519124】,想捣腾捣腾Dubbo,查看资料说Dubbo支持rest的http协议,然后就尝试了一下,发现很多人在pom文件里面用的版本是2.8.4,然后去Maven中央仓库下jar包呗 结果:TM最新才2.6.5,这下傻逼了,...

weixin_42465125的博客 2611

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jenkins rest api调用中的一些坑

jenkins提供了一些api可以让我们远程对jenkins进行操作, 这里说一些jenkins关于安全相关的一些坑 1.跨域访问: 跨域访问我们需要通过get请求获取到/crumbIssuer/api/json,然后再请求头中添加crumbRequestField值为crumb的头信息 2.登录验证信息,一些需要登录才能操作的需要我们添加校验信息: headers.add("Authorization", "Basic YWxsZW46YWxsZW4="); 3。token api 高版本的

dw147258dw的专栏 2328

通过REST API搜获jira issue踩过的坑

用命令行的方式使用jira的REST API需要特定权限, 可以跟管理员申请权限. 命令备忘: curl -u username -X GET -H "Content-Type: application/json" https://jira.xx.com/rest/api/2/search?jql=project=projectname&amp;status=open 要想在命令行终...

不积跬步无以至千里 7816

Rest风格中关于JPA使用懒加载的坑

  公司最近使用的ORM框架是JPA实现产品使用的是hibernate,曾经看过一篇博客上面说的是如果团队里面没有一个精通hibernate的人,那么最好不要使用它,我现在是深刻的体会到了。但是使用什么框架不是我能决定的,如果是我的话,我宁愿使用mybatis。吐槽完来讲讲出现的问题,因为我们项目是一个电商的项目模块比较多,所以各种表关联。用了一段时间以后,我们发现非常的慢,打开一个页面要20多秒...

weixin_34246551的博客 275

使用GeoServer的Rest接口发布shp图层的坑

Geoserver的rest接口使用参考以下文章: https://blog.youkuaiyun.com/weixin_40184249/article/details/87877740 一 在配置geoserver-manager库和slf4j-api、slf4j-log4j12库时需注意使用的版本不能有冲突,不然就会出现“NoSuchMethodError: org.slf4j.spi.Location...

qq_37668442的博客 3031

dubbo中间件的rest协议踩过的坑

一、所需jar包如下&lt;!-- dubbo开始 --&gt;           &lt;dependency&gt;             &lt;groupId&gt;com.alibaba&lt;/groupId&gt;             &lt;artifactId&gt;dubbo&lt;/artifactId&gt;             &lt;version&gt;2

java后端架构 2699

EDUSOHO踩坑笔记之二十七:REST API

REST API 版本控制 新API路由和老API路由都是相同的路由前缀。如果在header里增加Accept参数,值为application/vnd.edusoho.v2+json,将会访问新接口。如果不加,默认访问老接口。 排序 一些接口提供对结果排序,在请求URL上使用sort参数即可,这个参数使用逗号分隔多个排序字段,默认排序是按照创建时间倒序 field表示按照field字段正排-field表示按照field字段倒排 比如说,要获取学员最多,并且点击量最多的课程: ...

jyl_sh的专栏 1251

Gazebo踩坑(一)[Err] [REST.cc:205] Error in REST request

在运行gazebo时,遇到[Err] [REST.cc:205] Error in REST request的错误,根据该视频,解决方式如下: 修改~/.ignition/fuel中的config.yaml文件(不知道如何查看隐藏文件的小伙伴,可通过ctrl+h的方式),将url: https://api.ignitionfuel.org修改为url: https://api.ignitionrobotics.org,其中需要注意的是,url和name必须要对齐,否则会出现[Err] [ClientConf

Jesse_Liu666的博客 2838

从REST到GraphQL迁移指南:Java开发者避坑宝典

掌握从REST到GraphQL的平滑迁移方法,解决接口冗余与数据过载问题。结合Java GraphQL实践案例,详解Spring Boot集成、Schema设计与性能优化技巧,提升前后端协作效率。适用微服务架构升级场景,值得收藏。

QuickSolve的博客 899

Spring Boot REST API 开发常见的 7 个“坑”,你都避开了吗?

在代码中,我们经常需要在日志中记录数据,或者将数据序列化后通过 API 返回。在这些场景下,必须隐藏用户的敏感信息(如密码、身份证号等),以防安全泄露。不分页会导致严重的性能问题和糟糕的用户体验。但是,我们在写代码的时候常常会犯一些错误,这些错误可能会影响 API 的。不对用户的输入进行校验,可能导致数据损坏,甚至引发安全漏洞(如 SQL 注入、XSS 攻击等)。不清晰的错误信息让调试问题变得异常困难,而且还可能暴露潜在的安全漏洞。不恰当的异常处理,或者干脆不处理异常,会给公司和客户带来一堆麻烦。

郑龙飞 1405

docker 部署 composer-rest-server踩坑版

将Google OAUTH2.0与REST服务器配合使用 本教程深入介绍如何配置OAUTH2.0身份验证策略(例如,针对Google,Facebook,Twitter身份验证提供程序等)以授权访问已配置的REST Server实例中的资源 - 并允许区块链网络的最终用户与部署智能合约/业务网络。下面显示了一个概述图,下面显示了一个更详细的图,显示了认证流程。您将以多用户模式运行REST服务器并测...

吴晓斌的博客 1182

ElasticSearch7 JavaAPI Java High Level REST Client 使用脚本script遇到的坑

版本 ElasticSearch:7.9 elasticsearch-rest-high-level-client:7.6 问题 最近写了个项目,需要用到搜索,就使用了ES,但是在使用script的时候遇到了几个坑,在这里记录一下,我的script是已经存在ES里面了的,通过id调用。 过程 1.使用了Script的getParams().put()方法设置参数 结果:抛出了java.lang.UnsupportedOperationException异常,因为Script的getParams()方法得到的

Baibair的博客 1815

dubbox rest协议jackson 反序列化的坑

dubbox 相对于dubbo 对了 rest 协议的支持 而且默认序列化的协议 是json dubbox 内部是通过 RestEasy 处理 rpc 服务 而 RestEasy获取序列化是 是通过 spi 加载的 而我们项目中恰好使用 这个 provider使用 的 jackson版本是 1.9.8 而 jackson 2.x 的命名空间 与1.x 完全不同 ...

dizhaoqiang8021的博客 352
下一篇: JRebel-热部署插件使用-绝对干货
java_zhj9
博客等级 码龄10年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值