Java服务端HTTP接口开发(各种类型、token、cookie、session)的代码示例

Java服务端HTTP接口开发(各种类型、token、cookie、session)的代码示例

RESTful接口

REST 是Representational State Transfer的缩写,翻译是”表现层状态转化”。更简单地说就是,在 Restful 风格中,用户请求接口使用同一个url,而对请求资源要进行不同的操作则通过不同的请求方式(get、post、delete、put等等)进行区分,这样可以在前后台分离式的开发中,使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。

RESTful是一种网络应用程序的设计风格和开发方式,并没有一个明确的标准。REST 指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。基于HTTP,可以使用XML格式定义或JSON格式定义面向资源是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器 上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。

RESTful是一种轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)——比如常用于微服务应用SpringBoot项目间的通信。也有人提到适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为【新增、变更、删除】所调用资源。

微服务(或微服务架构)是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。

7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS

各种请求方式及应用场景

1、POST /url 创建
2、DELETE /url/xxx 删除
3、PUT /url/xxx 更新
4、GET /url/xxx 查询

如果URL可以在客户端确定,那么可使用PUT,否则用POST。

接口传入参数的方式

Get接口传入的参数

@RequestParam(value = "startTime", defaultValue = "2023-03-22_16:39:35.106"):通过@RequestParam注解来标识Get接口的每一个传入参数,Get接口用于接收Java的基本数据类型

Post接口传入的参数

@RequestBody:通过@RequestBody注解来标识【接收字节流形式的类对象】参数,Post接口用于接收Java的自定义类的对象(这个类对象其实对应的是以表单形式传输的数据参数,比如大多数表单在提交时是发起的POST 请求)。(比如自定义类的对象,若是上传文件,也将文件赋值给该类对象的其中一个属性?)

Put接口传入参数

Delete接口传入参数

各类型接口开发示例

幂等的概念

接口幂等性,幂等即多次(幂)运行之后结果仍然相同,就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。自认,是指当本次请求过程中出现错误、失败时,会回退至运行之前,不会对下次造成任何影响;只有本次请求成功,当次才会真正运行至结束,比如数据库事务
 
其他博客中给出的例子——比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性

普通服务端接口

Get(查询)

安全且幂等,表示获取。@RequestParam用来接收字节流形式的Java基本类型参数,与Post接口接收的类对象参数相对

服务端提供的Get接口开发示例
	@RequestMapping("/getTree")
    @ResponseBody//将返回信息转变为字节流,之所以要加此注解,是为了区别返回值是通过网络返回给用户,还是将值传给下一个方法继续在本地处理。
    public JSONObject getExperimentTreeController(@RequestParam(value = "startTime", defaultValue = "2023-03-22_16:39:35.106") String startTime,, HttpServletRequest request)
    //@RequestParam用来接收字节流形式的Java基本类型参数;HttpServletRequest request用来获取当前请求的url、cookie等信息,比如Cookie[] cookies = request.getCookies();

会向数据库索取数据,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改内容、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的,类似于数据库的select操作。

有博客提到,带并入本文【“GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。”
“POST把提交的数据则放置在是HTTP包的包体中”。
“POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。”】

Post(新增)

不安全且不幂等,使用服务端管理的(自动产生)的实例号创建资源、子资源@RequestBody用来接收字节流形式的类对象参数

	@RequestMapping("/editList")
    @ResponseBody//将返回信息转变为字节流
    public JSONObject editOrderListController(@RequestBody JSONObject json, HttpServletRequest request)
    //@RequestBody用来接收字节流形式的类对象参数(比如自定义类的对象,若是上传文件,也将文件赋值给该类对象的其中一个属性?),HttpServletRequest request用来获取当前请求的url等信息

也是向服务器端发送数据的,但是该请求会改变数据的种类等资源,类似于数据库的insert操作,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

Put(更新修改)

不安全但幂等,通过替换的方式更新资源。如果未被修改,则更新资源(乐观锁)。

会向服务器端发送数据,从而改变信息,该请求就像数据库的update操作一样,只修改数据的内容,不增加数据的种类等,也就是说无论进行多少次PUT操作,只会改编数据的取值,而不会变更数据的结构,类似于数据库的update操作。

POST和PUT的区别

也正因为如下,虽然二者均向服务器发送数据,但是PUT因为只更新数据的内容,而不增加新的数据类型,所以PUT主要作用在一个具体资源之上的(url/xxx);而POST因为若没有对应的数据类型,会添加数据种类,所以主要作用在一个集合资源之上的(url)。

Delete(删除)

不安全但幂等,删除资源

用来删除某一个资源,类似于数据库的delete操作。

PATCH
HEAD
OPTIONS

处理携带Session的接口

待读思路并补入此博客
待补入此博客中的代码

处理携带Cookie的接口

待补入此博客,目前看到的【从请求中获取session和cookie的代码】和【保存cookie的原理(第一次打开没有、第二次打开有——即框架自动生成cookie并存于其中)介绍】。
待补入此博客中cookie操作的代码部分
待补入此博客中关于cookie操作的代码

接口返回参数的方法

待补入此博客中的代码示例

接口返回参数的方式

以json格式返回接口运行结果,比如使用net.sf.json.JSONObjectnet.sf.json.JSONObject的使用方法详见此博客

接口返回码及含义

标准的http状态码有五类,分别是:

  • 1xx: 通知
  • 2xx: 成功
  • 3xx: 重定向
  • 4xx: 客户端错误
  • 5xx: 服务端错误

有的博客提到“对于客户端来讲,只需要在业务代码里处理2xx,4xx的状态码即可,因为1xx和3xx对开发者是透明的,http调用框架(ajax、retrofit、axios等等)会自动处理;而5xx是后端的问题,不需要客户端做什么调整”,待确认

Get接口
200(OK) - 表示已在响应中发出
204(无内容) - 资源有空表示
301(Moved Permanently) - 资源的URI已被更新 303(See Other) - 其他(如,负载均衡)
304(not modified)- 资源未更改(缓存)
400 (bad request)- 指代坏请求(如,参数错误) 404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务端当前无法处理请求
Post接口
200(OK)- 如果现有资源已被更改
201(created)- 如果新资源被创建
202(accepted)- 已接受处理请求但尚未完成(异步处理) 301(Moved Permanently)- 资源的URI被更新
303(See Other)- 其他(如,负载均衡)
400(bad request)- 指代坏请求
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
409 (conflict)- 通用冲突
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) 415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务当前无法处理请求
Put接口
200 (OK)- 如果已存在资源被更改
201 (created)- 如果新资源被创建
301(Moved Permanently)- 资源的URI已更改
303 (See Other)- 其他(如,负载均衡)
400 (bad request)- 指代坏请求
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
409 (conflict)- 通用冲突
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) 415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务当前无法处理请求
Delete接口
200 (OK)- 资源已被删除
301 (Moved Permanently)- 资源的URI已更改
303 (See Other)- 其他,如负载均衡
400 (bad request)- 指代坏请求
404 (not found)- 资源不存在
409 (conflict)- 通用冲突
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务端当前无法处理请求

RPC接口

实现“调用远程接口”就像调用本地接口一样的效果
在这里插入图片描述

RMI接口

不同工程开发不同风格的网络接口代码示例

restful设计风格接口和webservice接口,restful风格(两要素:把每个接口看作一个资源,每个资源都有唯一标识,即URL;对于统一资源不同行为,用http-method来表示)将将每一个接口当做一个资源,要保证资源的唯一性。

使用JEECG的jwt开发restful风格接口

REST是Representational State Transfer的缩写,翻译是”表现层状态转化”。

面向资源是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器 上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。

在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put…等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。

在Restful风格中,有如下规定:
GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。 POST(CREATE):在服务器新建一个资源,调用insert操作。 PUT(UPDATE):在服务器更新资源,调用update操作。 PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。(目前jdk7未实现,tomcat7也不行)。 DELETE(DELETE):从服务器删除资源,调用delete语句。

举个例子:如果当前url是 http://localhost:8080/User那么用户只要请求这样同一个URL就可以实现不同的增删改查操作,例如
http://localhost:8080/User?_method=get&id=1001  这样就可以通过get请求获取到数据库 user 表里面 id=1001 的用户信息
http://localhost:8080/User?_method=post&id=1001&name=zhangsan  这样可以向数据库 user 表里面插入一条记录
http://localhost:8080/User?_method=put&id=1001&name=lisi  这样可以将 user表里面 id=1001 的用户名改为lisi
http://localhost:8080/User?_method=delete&id=1001  这样用于将数据库 user 表里面的id=1001 的信息删除
这样定义的规范我们就可以称之为restful风格的API接口,我们可以通过同一个url来实现各种操作

开发步骤

在JEECG中实现一个接口,无需关注token的鉴权机制,需要实现以下步骤:
(1)开发restful接口对应的controller类及接口方法。
(2)给controller类和对应的接口方法,分别添加注解@RequestMapping("/paperfile")
,如下图所示。
controller类
接口对应的方法
(3)枚举类InterfaceEnum中定义接口编码
在JEECG工程中org.jeecgframework.web.system.enums包下的InterfaceEnum文件中定义开发好的接口方法。该方法的构造函数及各个参数的含义,详见下文。通过此文件来将开发的controller与JEECG中配置的接口关联起来

枚举类InterfaceEnum中定义接口编码

首先在jeecg工程中找到InterfaceEnum所在位置:在org.jeecgframework.web.system.enums.InterfaceEnum包内

InterfaceEnum类中的构造方法为
private InterfaceEnum(String code, String name, String url, String method, Integer sort),如下图所示,
在这里插入图片描述
将开发的接口,通过上图的构造方法,声明在InterfaceEnum中。与其他声明在此的接口,以,相隔,如下图所示。其中,deliverfile("deliverfile",均为JEECG后台——接口权限管理——的录入/编辑接口权限时设置的“接口权限编码”。
在这里插入图片描述
在这里插入图片描述

InterfaceEnum中构造方法各参数的含义,如下所示。
在这里插入图片描述
(4)JEECG后台中,需要对开发好的接口进行对应的配置,在JEECG工程后台启动服务器程序,进行接口权限的管理,把自己的接口写进去。后台配置中的接口权限编码为InterfaceEnum中定义的接口编码,如下图所示。
在这里插入图片描述
进行到此处,恭喜,JEECG的jwt接口开发已经顺利完成,通过下图代码,就可以访问开发好的controller中的方法接口了。其中,调用开发好的接口地址为http://localhost:8080/jeecg/rest/paperfile/deliverypaperfile/delivery为注解@RequestMapping("/paperfile")中设置的controller和接口方法的地址。

此外,还要注意的是,传入的所有参数要以对象的形式,转换成json格式,传入接口,如下图所示。
在这里插入图片描述
(5)在开发完成的接口中,调用InterfaceUtil工具类getInterfaceRuleDto获取接口权限,验证是否有访问权限,如果无相应权限则返回消息,并结束接口进程。

TSInterfaceServiceI interfaceService = ApplicationContextUtil.getContext().getBean(TSInterfaceServiceI.class);

InterfaceRuleDto interfaceRuleDto = interfaceService.getInterfaceRuleByUserNameAndCode(deliveryfileEntity.getOperatorName(),InterfaceEnum.deliverfile);

//返回信息为空,表示该人员没有权限
if(interfaceRuleDto == null) return Result.error("你没有该接口的权限");

(6)根据获取的数据权限,组装查询条件返回接口数据,如下图所示。
在这里插入图片描述
此处要注意的是,在对CriteriaQuery做好配置后,还需要调用this.jeecgDemoService.getDataGridReturn(query, true);来获取查询结果。

具体步骤如下:

1.左侧导航栏,接口权限管理,新建的接口——接口权限录入;已有的接口——接口权限编辑。
在这里插入图片描述
在这里插入图片描述

2.左侧导航栏,接口角色管理
在这里插入图片描述
3.在InterfaceEnum中添加接口信息
名称是要跟服务器端添加的接口名称保持一致。
在这里插入图片描述

接口的地址

接口配置完成后,访问地址为:http://localhost:8080/jeecg/rest/paperfile/delivery,即http://localhost:8080/工程名/rest/@RequestMapping("/配置的controller名")/@RequestMapping("/配置的接口实现方法名")

向restful接口传入多个参数的情况

按照这篇博客,并结合目前自己这段时间以来的开发经历,restful接口貌似只能穿单个对象= =,而且该对象还要转换为json格式后,才能顺利传入接口并调用,待进一步确认。
采用Json web token (JWT)机制,基于token的鉴权机制,来保证接口的使用安全。JWT验证用的token采用redis进行缓存,redis.properties文件是配置文件。此处先给出官网接口文档

接口调用使用http协议,restful请求方式。

JEECG开发restful接口

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端保留用户的认证信息或者会话信息,而是将验证用的token存在请求的客户端的本地主机上,从而使得基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

基本流程

(1)用户使用用户名密码来请求服务器
(2)服务器进行验证用户的信息
(3)服务器通过验证发送给用户一个token
(4)客户端存储token,并在每次请求时附送上这个token值(存在head里的参数X-AUTH-TOKEN)
(5)服务端验证token值,并返回数据

图例

在这里插入图片描述

优点

  • 因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。
  • 因为有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。
  • 便于传输,jwt的构成非常简单,字节占用很小,所以它是非常便于传输的。
  • 它不需要在服务端保存会话信息, 所以它易于应用的扩展

安全相关

  • 不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分。

payload:

Java开发webservices风格接口

目前使用JEECG工程进行webservice接口的开发工作,开发流程 总结如下。
RESTful接口服务和WebService接口服务(的区别?)

开发步骤

推荐这篇博客,讲解的很详细。

配置spring-mvc.xml文件

如果spring-mvc.xml文件中有此语句,记得检查解除注释;如果没有配置,则将此语句添加进spring-mvc.xml文件,如下图所示。
在这里插入图片描述

文件在工程中的位置

直接就在src文件夹下。

配置web.xml文件

在文件中加入CXF的Endpoint,并配置相关信息,如下图所示。
在这里插入图片描述

文件在工程中的位置

在——与src同级——WebRoot内的,WEB-INF文件夹下。

配置cxf-servlet.xml文件

其中,的id填写“接口的名称”,后面的class填写“接口实现类的路径和名称”;
<jaxws:endpoint …/>中填写“#接口的名称”,address中填写的是接口访问的路径。
在这里插入图片描述

文件在工程中的位置

在——工程的一级目录——与src同级的——webRoot文件夹下的WEB-INF包下。

编写接口
  • 先编写interface类,代码如下图所示。
package com.webservice.controller;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
	
	public String say(String str);
}

  • 再编写接口实现类
package com.webservice.controller;

import javax.jws.WebService;

@WebService
public class HelloWorldImpl implements HelloWorld {

	@Override
	public String say(String str) {
		// TODO Auto-generated method stub
		return "hello" + str;
	}

}

此处需要注意的是,虽然声明接口时已经加了@webservice注解,但是接口实现类同样需要需要添加@webservice注解,如上图所示。否则会出现如下所示的错误。
在这里插入图片描述

发布接口

新建一个包含主函数的类,使用Endpoint.publish方法,作为webservice的发布器,代码如下。运行此文件,即可发布配置好的接口。
在这里插入图片描述

发布接口的访问路径

http://localhost:8080/工程名/【servlet配置的路径,如下图所示】/【cxf-servlet.xml文件中配置的接口访问路径,如“开发步骤”的第二步“配置cxf-servlet.xml文件”截图红框中“address”配置的地址所示】?wsdl
在这里插入图片描述
例如,本文中自己开发接口的路径应为http://localhost:8080/jeecg-nomaven/servlet/AxisServlet/HelloWorld?wsdl

发布接口成功的标志

运行项目,如果成功,eclipse会在控制台显示“发布webservice成功”的信息,如下图所示。
在这里插入图片描述
随后访问http://localhost:8080/jeecg-nomaven/servlet/AxisServlet/HelloWorld?wsdl,看到如下界面,恭喜,开发成功!
在这里插入图片描述

注意事项

  1. 在WebService服务发布以后,即使在底部控制台的server服务器选项卡关闭服务器,也不会关闭WebService服务,其仍会占用端口,需要在底部控制台的Console选项卡才能关闭。
  2. WebService与restful接口无法同时启动,因为共同占用一个端口。只能关掉一个,才能打开另一个。

Java开发restful风格接口

将自己一开始的经验总结在此

官方说明文档

说明文档

接口开发中需要的注解

@RequestMapping(“/delivery”)

接口开发中需要注意的事项

  • 传入参数,应尽可能精简。
  • 在运行业务逻辑前,要进行必要的参数检查,比如判空。
  • 接口开发中,将多个对象的属性值传递给一个新对象,尽量不要使用构造函数的方式。
  • JEECG工程中,使用自定义类型作为接口传入参数时,需要提供默认(无参)构造方法,否则调用接口时传入的参数,接口获取不到。

SpringMVC工程开发接口

使用@RequestMapping()前,要现在spring-mvc配置文件上添加<mvc:annotation-driven />,使用后会自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter 这两个bean,是spring MVC为@Controllers分发请求所必须的,即解决了@Controller注解使用的前提配置。

JEECG表单对外接口

官方说明文档

online表单对外接口的官方文档Online表单对外接口
此处先给出官方文档

这篇博客时,自认上面“online表单对外接口的官方文档”中使用的id来源于表单配置中的id

接口开发中的注意事项

补入这篇博客

统一接口响应体的格式规范

比如,使用ResponseMessage<>类来作为返回给调用接口的用户的统一信息体,代码如后所示return new ResponseMessage<>(ResponseMessageCodeEnum.ERROR, "检查文件信息时发生异常");

  1. 通过修改响应体ResponseMessage<>的构造方法,使ResponseMessage<>只接受使用枚举类型来设置响应码的方式
  2. ResponseMessage<>中返回给用户的响应码,通过使用枚举类型,来保证同一情况对应统一的响应码,如下图所示。
    在这里插入图片描述

检查调用接口人员的权限

TSInterfaceServiceI interfaceService = ApplicationContextUtil.getContext().getBean(TSInterfaceServiceI.class);
		InterfaceRuleDto interfaceRuleDto = interfaceService.getInterfaceRuleByUserNameAndCode(“操作人员名称”,InterfaceEnum.注册的方法名);
		if(interfaceRuleDto==null){
			return Result.error("您没有该接口的权限!");
		}

接口加密

接口还可以使用JDK中配置的加密算法?这篇博客中提到“ jdk\jre\lib\security\java.security 配置加密算法 ”,待确认

接口测试

接口开发完毕后,就需要调用接口来测试功能。

方法一:直接在接口的服务器工程中新建一客户端

直接在服务器的工程中新建一个.class文件,在其中加入主函数,然后在主函数中接口。先运行【提供接口服务的】服务器端,再运行【测试接口的】客户端。

一个工程中可以有多个主函数,只不过当你运行属于服务器工程的代码文件时,会启动服务器的主函数,进而进入工程来运行你原本要运行的代码文件;而当你运行属于客户端工程的代码文件时,则会启动客户端的主函数。

控制台窗口

通过下图红框中的按钮“Display selected console”,可以切换显示客户端和服务器的控制窗口,以此来查看各自的运行日志和错误报告。
在这里插入图片描述

返回的信息

错误信息

注意JwtHttpUtil.httpRequest中的用于输出流的方法,如果Stream是错误信息,需要用httpUrlConn.getErrorStream();来进行输出,如果仍用httpUrlConn.getInputStream();就会报错。所以代码应如下所示,详见这篇博客

if (httpUrlConn.getResponseCode()!=HttpURLConnection.HTTP_OK|) {
    inputStream = httpUrlConn.getErrorStream();
}else {
	inputStream = httpUrlConn.getInputStream();
}

返回的错误信息是html格式的,可以先放入记事本中,存为.html文件,再用浏览器打开,如下所示。
首先遇到的是connect timed out,发现是自己在redis.properties中配置的服务器地址不对。
在这里插入图片描述
根据错误,修改了eclipse工程中的redis.properties中的redis.host的值,将其改为本机地址127.0.0.1。保存,重启。
在这里插入图片描述
随后又遇到了Connection refused: connect,如下所示。开始以为是没有装redis的原因,所以又赶紧将redis配置安装上了,详细的步骤可以参见这篇博客
在这里插入图片描述
但是安装之后,依然有此问题,仍然提示Connection refused: connect,并未得到解决。
在网上查找原因,发现是因为8080端口被占用了,命令提示行中输入netstat -aon|findstr 8080,先根据端口号查找到进程号,如下图所示。注意,红框中的数字是占用8080端口的进程号,但并不是全部都占用的本地的8080端口!:
在这里插入图片描述

接着输入tasklist|findstr "7636"根据进程号查找进程名,发现是eclipse,如下所示。
在这里插入图片描述
最后,如果要关闭该进程,则根据进程名,输入taskkill /f /t /im eclipse.exe

随后,出现了“X-AUTH-TOKEN header”提示,如下所示。离成功越来越近了。
在这里插入图片描述
还修改了redis的配置文件信息,在redis的安装目录中,

成功获取token

在这里插入图片描述

但是请注意,在安装配置好redis之后,第一次并未成功获取token,随后重新启动redis,再次调用token接口,才获取到接口。
在这里插入图片描述
已确认,在请求接口前需要先启动redis(先F:进入redis的安装盘符,再cd Redis-5.0.10进入redis的安装目录,最后执行启动指令redis-server.exe redis.windows.conf,如上图红框所示),否则会出现如下的错误提示。
在这里插入图片描述

同一工程中开发前端和后端,用前端来调用后端进行测试

详见此博客

方法二

自己使用的是swagger来测试接口,详细的安装配置和使用方法可以参考这篇博客

方法三

可以尝试这篇博客中提供的测试接口的方法。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Java后端接口设计示例: 1. URL设计: - 获取用户信息:/api/users/{id} - 创建用户:/api/users - 更新用户信息:/api/users/{id} - 删除用户:/api/users/{id} 2. HTTP方法: - 获取用户信息:GET - 创建用户:POST - 更新用户信息:PUT - 删除用户:DELETE 3. 请求与响应格式: - 请求格式:JSON - 响应格式:JSON 4. 参数传递: - 获取用户信息:路径参数(id) - 创建用户:请求体参数(用户信息) - 更新用户信息:路径参数(id)和请求体参数(更新的用户信息) - 删除用户:路径参数(id) 5. 错误处理: - 统一错误码:使用HTTP状态码表示不同类型的错误(例如,404表示资源不存在) - 错误消息:在响应的JSON中包含错误消息字段 6. 接口示例代码: ```java @RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { User user = userService.getUserById(id); if (user != null) { return ResponseEntity.ok(user); } else { return ResponseEntity.notFound().build(); } } @PostMapping public ResponseEntity<User> createUser(@RequestBody User user) { User createdUser = userService.createUser(user); return ResponseEntity.status(HttpStatus.CREATED).body(createdUser); } @PutMapping("/{id}") public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) { User user = userService.updateUser(id, updatedUser); if (user != null) { return ResponseEntity.ok(user); } else { return ResponseEntity.notFound().build(); } } @DeleteMapping("/{id}") public ResponseEntity<Void> deleteUser(@PathVariable Long id) { boolean deleted = userService.deleteUser(id); if (deleted) { return ResponseEntity.noContent().build(); } else { return ResponseEntity.notFound().build(); } } } ``` 这是一个简单的示例,其中使用了Spring MVC框架来实现RESTful风格的接口设计。具体的业务逻辑可以根据实际需求进行写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值