位置: IT常识 - 正文

Jmix 中 REST API 的两种实现(java rest接口)

编辑:rootadmin
你知道吗,在 Jmix 中,REST API 有两种实现方式! 很多应用是采取前后端分离的方式进行开发。这种模式下,对前端的选择相对灵活,可以根据团队的擅长技能选择流行的 Angular/React/Vue 之一,或者前端为App/小程序等手机应用。Jmix 的一种典型应用场景就是作为这种类型应用程 ...

推荐整理分享Jmix 中 REST API 的两种实现(java rest接口),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:rest java,rest接口调用java,rest.api,rest api java,rest接口调用java,rest java,rest js,rest js,内容如对您有帮助,希望把文章链接给更多的朋友!

你知道吗,在 Jmix 中,REST API 有两种实现方式!

很多应用是采取前后端分离的方式进行开发。这种模式下,对前端的选择相对灵活,可以根据团队的擅长技能选择流行的 Angular/React/Vue 之一,或者前端为App/小程序等手机应用。Jmix 的一种典型应用场景就是作为这种类型应用程序的高级别管理 UI 和后端。为此,Jmix 提供了强大的通用 REST API 功能,支持包括开箱即用的实体、文件、元数据、用户会话的 API 以及经过简单配置就能支持的业务逻辑(服务)REST API。

由于 Jmix 是基于 Spring Boot 框架,因此也支持 Spring 的 RestController。那么对于 Spring 的 REST API 机制和 Jmix 提供机制,究竟有什么不同,而我们在开发时又该如何选择呢?本文将通过具体的代码示例,介绍这两种 API 的区别,相信看完之后,该如何选择您心里应该有数了。

数据模型和服务

我们假设一个简单的场景,为了给用户提供凑单功能,我们在后端写一个服务用于查询低于某个价格的产品(Product),并将满足条件的产品列表返回给客户端。

数据模型

首先我们构建一个简单的 JPA 实体:Product 类,包含名称和价格两个属性:

@JmixEntity@Table(name = "SLS_PRODUCT")@Entity(name = "sls_Product")public class Product { @JmixGeneratedValue @Column(name = "ID", nullable = false) @Id private UUID id; @InstanceName @Column(name = "NAME") private String name; @Column(name = "PRICE") private Double price; ... // 其他属性}

实体通过 Jmix Studio 创建可以选择其他实体特性,比如版本、实体审计、软删除属性等。

服务

可以像普通 Spring Boot 应用那样,自己手动创建一个 @Service 类。也可以通过 Jmix Studio 提供的创建 bean 的功能创建 Service。这里我们用 Jmix Studio 创建一个 Bean,该功能默认创建带 @Component 注解的类,我们手动将类注解修改为 @Service:

@Service("sls_ProductService")public class ProductService { @Autowired private DataManager dataManager; // 插入代码段时,默认注入带有权限检查的 DataManager public List<Product> getProductsCheaperThan(Double price){ // 注意,这里我们并没有对输入参数 price 做检查 List<Product> productList = dataManager.load(Product.class) .query("select p from sls_Product p " + "where p.price < :priceInput") .parameter("priceInput", price) .list(); return productList; }}

这里的加载实体列表代码,我们通过 Studio 的代码段功能自动添加。

服务中,我们使用了 Jmix 的 DataManager 和 JPQL 查询语句加载实体,并使用方法的输入参数作为 JPQL 的参数。Jmix 的持久层也支持 Spring Data Repository 或者 MyBatis。而使用 DataManager 的一个好处是可以利用 Jmix 的安全机制,控制 API 调用方对实体的访问权限。

Jmix 服务 API

Jmix 服务(Service) API 可以将任意 Spring bean 作为 HTTP 接口开放。Jmix 负责 HTTP 交互,例如,提供 HTTP 响应编码、进行错误处理等。下图是 Jmix 服务 API 的流程图:

Jmix 中 REST API 的两种实现(java rest接口)

可以看到,作为应用程序开发者,仅需要编写服务代码。另外,还需做一些配置:

在项目的 resources 目录添加 rest-services.xml,用于配置可作为 REST API 使用的服务及其方法,内容如下:<?xml version="1.0" encoding="UTF-8"?> <services xmlns="http://jmix.io/schema/rest/services"> <service name="sls_ProductService"> <!-- 指定服务名称 --> <method name="getProductsCheaperThan"> <!-- 指定方法名称 --> <param name="price" type="java.lang.Double"/> <!-- 指定方法参数和类型 --> </method> <!-- 可以添加服务中其他方法 --> </service> <!-- 可以添加其他服务 --> </services>在项目的 application.properties 文件中,设置 jmix.rest.services-config 参数,指定上面配置的 xml 文件:jmix.rest.services-config = com/abmcode/sales/rest-services.xml

完成这些配置之后,就可以通过 REST 客户端调用了,URL 为 /rest/services/<service_name>/<method_name>。例如,通过 Postman 调用:

服务 API 会默认使用 Jmix 的安全机制:API 端口需要使用认证 token 进行访问,而且用户需要有访问 REST API 和所查询实体的权限。另外,Jmix 的服务 API 也支持匿名访问。

Spring 控制器 API

然后我们再看看 Spring 的 RestController 方式。首先,我们定义一个控制器:

@RestController("sls_ProductController")@RequestMapping("/products")public class ProductController { @Autowired private ProductService productService; @GetMapping("priceunder") public List<Product> getPriceUnder(@RequestParam Double price) throws Throwable { if (price < 0) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "价格参数必须大于 0"); // 自定义控制器层的参数检查,抛出请求异常。 } return productService.getProductsCheaperThan(price); }}

Jmix 中的控制器接口默认都是匿名的,但是为匿名用户配置能访问实体信息又不够安全,Jmix 提供了一个应用程序属性,支持使用 Jmix 安全机制对自定义控制器进行保护:

# 支持逗号分隔的多个 patternjmix.rest.authenticatedUrlPatterns=/products/**

然后,重启服务就可以通过 Postman 进行调用。注意,这里的 URL 与服务 URL 不同,直接使用了控制器中定义的路径:

结论

通过上面的代码,我们可以看到,在 Jmix 中使用两种类型的 REST API 其实都不复杂,但是,也是各有优势:

Jmix 服务 API:

不用编写控制器代码,仅通过 XML 配置即可使用默认使用 Jmix 的安全机制可以使用 Fetch plan 定义返回实体的字段

Spring 控制器:

更加灵活,可以使用 Spring 控制器自定义 HTTP 状态码、响应类型或者异常错误除了使用服务层的实体控制外,还可以在控制器层使用自定义的 DTO 对返回实体的信息做进一步控制

因此,在大多数情况下,我们仅使用 Jmix 的服务 API 就能够满足使用要求。针对部分复杂场景可以使用 Spring 控制器 API。

文中使用的 Jmix 版本:1.3.1

本文链接地址:https://www.jiuchutong.com/zhishi/304524.html 转载请保留说明!

上一篇:VMware Workstation Pro 16 安装教程(vmware workstation pro怎么卸载干净)

下一篇:帝国cms怎么加广告(帝国cms使用手册)

  • 网站推广人员有哪些禁忌(网站推广人员有什么要求)

    网站推广人员有哪些禁忌(网站推广人员有什么要求)

  • vivox70怎么设置通话自动录音(vivox70怎么设置动态壁纸)

    vivox70怎么设置通话自动录音(vivox70怎么设置动态壁纸)

  • 抖音钱包怎么兑换抖币(抖音钱包怎么兑换消费)

    抖音钱包怎么兑换抖币(抖音钱包怎么兑换消费)

  • 小米12有红外线功能吗(小米12有红外线功能怎么开)

    小米12有红外线功能吗(小米12有红外线功能怎么开)

  • 笔记本内存条怎么装(笔记本内存条怎么拆)

    笔记本内存条怎么装(笔记本内存条怎么拆)

  • 电脑上为什么会弹出很多广告(电脑上为什么会弹出美女广告)

    电脑上为什么会弹出很多广告(电脑上为什么会弹出美女广告)

  • 微信表情包上限扩充(微信表情包上限是多少)

    微信表情包上限扩充(微信表情包上限是多少)

  • c店因缺货退款有影响吗(店家缺货让我退款对我有影响吗)

    c店因缺货退款有影响吗(店家缺货让我退款对我有影响吗)

  • 华为荣耀20Pro手机长曝光怎么设置(华为荣耀20pro手机参数配置)

    华为荣耀20Pro手机长曝光怎么设置(华为荣耀20pro手机参数配置)

  • xs是双层主板吗(xs是双层主板还是单层)

    xs是双层主板吗(xs是双层主板还是单层)

  • x50pro是什么牌子(x50 pro是什么手机)

    x50pro是什么牌子(x50 pro是什么手机)

  • 拼多多点击出价是什么意思(拼多多出价越高点击率越高吗)

    拼多多点击出价是什么意思(拼多多出价越高点击率越高吗)

  • 显卡n卡和a卡的区别(显卡n卡和a卡的差距)

    显卡n卡和a卡的区别(显卡n卡和a卡的差距)

  • 精准查找和qq号查找有什么区别(qq号查找和精准查找的区别)

    精准查找和qq号查找有什么区别(qq号查找和精准查找的区别)

  • 抖音怎么给主播送小心心(抖音怎么给主播点赞)

    抖音怎么给主播送小心心(抖音怎么给主播点赞)

  • 苹果手机读不出来sim卡怎么办(苹果手机读不出移动卡什么原因)

    苹果手机读不出来sim卡怎么办(苹果手机读不出移动卡什么原因)

  • 微信收款码有手续费吗(微信收款码有手续吗)

    微信收款码有手续费吗(微信收款码有手续吗)

  • e3845和j1900性能对比(e3827和j1900)

    e3845和j1900性能对比(e3827和j1900)

  • vivox21与x23的区别(vivox21跟x23)

    vivox21与x23的区别(vivox21跟x23)

  • 手机怎么预约科目三(手机怎么预约科二)

    手机怎么预约科目三(手机怎么预约科二)

  • 桌面歌词怎么设置(桌面歌词怎么设置好看)

    桌面歌词怎么设置(桌面歌词怎么设置好看)

  • 怎样升级电脑浏览器版本(怎样升级电脑浏览器的版本更新)

    怎样升级电脑浏览器版本(怎样升级电脑浏览器的版本更新)

  • 荣耀手环如何关机(荣耀手环如何关闭久坐提醒)

    荣耀手环如何关机(荣耀手环如何关闭久坐提醒)

  • realmex语音唤醒(realmex语音唤醒功能)

    realmex语音唤醒(realmex语音唤醒功能)

  • 三星S7死机怎么办(三星s7手机死机解决方法)

    三星S7死机怎么办(三星s7手机死机解决方法)

  • excel如何批量查找(excel 批量查询)

    excel如何批量查找(excel 批量查询)

  • 缴纳个人所得税还算应届毕业生吗
  • 政府返还土地款的会计处理
  • 资产的计税基础大于账面价值会形成可抵扣的暂时性差异
  • 个体户和公司的经营范围有区别吗
  • 金蝶专业版二级科目设置
  • 公司分红是按股权比例分配吗
  • 房地产项目结转条件
  • 增值税期末留抵退税政策实施力度
  • 未发货先开票怎么结转成本
  • 公司车子的保养费怎么算
  • 自来水差额征税政策
  • 伤亡保险是什么意思
  • 建筑工程的适用范围
  • 各省市地税发票怎么开
  • 工资薪金支出税收金额怎么算
  • 河道工程维护管理费征收
  • 税控盘全额抵扣怎么做账
  • 没有产权的房子可以公证吗
  • 工会经费怎么做账务处理
  • 转账户有误退回会计处理
  • 第二年缴纳税控盘服务费入什么科目?
  • 一般纳税人增值税及附加税费申报表怎么填
  • 健身器材属于哪个部门管理
  • 工程预收款账务处理
  • cpu不支持vt怎么办
  • win10怎么看电脑名称
  • 利润分配未分配利润期末有余额吗
  • 应收票据到期收回时和未到期转让时
  • 公司内部收据能做凭证吗
  • nod32kui.exe - nod32kui是什么进程 作用是什么
  • 商票 银行贴现
  • Yii使用技巧大汇总
  • ubuntu设置nginx开机启动
  • 试运行期间收入和成本怎么记账
  • bert multihead
  • vue侧边栏导航,右侧显示对应内容
  • vue3父子组件传递数组通信
  • ChatGPT 中文调教指南。各种场景使用指南。学习怎么让它听你的话
  • mysqlmha高可用
  • 微擎框架是开源的吗
  • 未达起征点销售额是含税还是不含税
  • 银行收付款凭证是什么
  • mongodb数据库中使用哪个数据库可以设置用户名和密码
  • 帝国cms插件编写教程
  • 营运资金为正数说明企业什么
  • 百旺税控盘汇总上传如何检查
  • 雇用残疾人税收优惠
  • 软件研发费用怎么做账
  • 企业如何做增值业务
  • 发票必须包含什么内容
  • 平销返利如何开票是负数的
  • 营改增阶段
  • 营改增后还有建筑业发票吗
  • 租赁行业出租方要交税吗
  • 建筑安装合同印花税率怎么算
  • 技术服务费可以开专票吗
  • 委托加工科目有余额嘛
  • 工程款发票开给委托方要如何处理?
  • 工程公司存货包括哪些科目
  • 收到转账支票怎么填
  • 原始凭证的审核要求有哪些
  • sql语句基础教程
  • Win10系统如何开启全部权限
  • mac如何安装dmg软件
  • linux中tailf命令
  • 进程lsass.exe
  • win10睡眠唤醒键
  • win7开机提示重启怎么办
  • win10开机多了一个账户怎么删除
  • Unity3D游戏开发培训课程大纲
  • Vuforia 4.0 beta——Object Recognition (二)
  • unity怎么学
  • js中构造函数怎么写
  • 如何查询纳税信用等级证明
  • 残疾人保障金税前扣除规定
  • 农机免税范围
  • 江苏省财务官网
  • 税务总局2019 14号
  • 高新区地税办税服务厅
  • 代理记账公司有什么风险吗?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设