位置: 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使用手册)

  • pad怎么关闭所有运行程序(怎样关掉ipad)

    pad怎么关闭所有运行程序(怎样关掉ipad)

  • 一张卡可以绑定两个支付宝吗(一张卡可以绑定多个nfc设备吗)

    一张卡可以绑定两个支付宝吗(一张卡可以绑定多个nfc设备吗)

  • qq怎么弄情侣空间(qq怎么弄情侣空间不显示)

    qq怎么弄情侣空间(qq怎么弄情侣空间不显示)

  • 笔记本电脑怎么按f4(笔记本电脑怎么重装系统)

    笔记本电脑怎么按f4(笔记本电脑怎么重装系统)

  • 苹果绑定支付宝付款方式被拒(苹果绑定支付宝付款怎么解除)

    苹果绑定支付宝付款方式被拒(苹果绑定支付宝付款怎么解除)

  • 华为p30和p30pro怎么选(华为p30与p30 pro的区别)

    华为p30和p30pro怎么选(华为p30与p30 pro的区别)

  • 华为hms core有必要更新吗(huawei hms core)

    华为hms core有必要更新吗(huawei hms core)

  • icould无法同步什么意思(icould无法同步图片)

    icould无法同步什么意思(icould无法同步图片)

  • 三星s10死机了怎么才能重新开机(三星s10卡住了怎么关机)

    三星s10死机了怎么才能重新开机(三星s10卡住了怎么关机)

  • 微型计算机的分类通常以微处理器的什么来划分(微型计算机的分代是根据什么划分的)

    微型计算机的分类通常以微处理器的什么来划分(微型计算机的分代是根据什么划分的)

  • 苹果手机下载软件怎么没有信任(苹果手机下载软件为什么要购买)

    苹果手机下载软件怎么没有信任(苹果手机下载软件为什么要购买)

  • 腾讯是什么(爱奇艺是猕猴桃腾讯是什么)

    腾讯是什么(爱奇艺是猕猴桃腾讯是什么)

  • 微信删除好友后怎么恢复聊天记录(微信删除好友后还能找到聊天记录吗)

    微信删除好友后怎么恢复聊天记录(微信删除好友后还能找到聊天记录吗)

  • 手机拍屏幕有条纹(手机拍屏幕有条纹怎么设置)

    手机拍屏幕有条纹(手机拍屏幕有条纹怎么设置)

  • 屏幕漏液是内屏还是外屏(屏幕漏液是内屏问题还是外屏)

    屏幕漏液是内屏还是外屏(屏幕漏液是内屏问题还是外屏)

  • 华为P30pro手机有双卡双待吗(华为p30pro手机有多长)

    华为P30pro手机有双卡双待吗(华为p30pro手机有多长)

  • word文档怎么打印双面(word文档怎么打下划线)

    word文档怎么打印双面(word文档怎么打下划线)

  • 小米锁sn码在哪里(小米锁查询)

    小米锁sn码在哪里(小米锁查询)

  • 微信如何设置一直登录(微信如何设置来电铃声)

    微信如何设置一直登录(微信如何设置来电铃声)

  • aplog设置干什么的(aplog需要开启吗)

    aplog设置干什么的(aplog需要开启吗)

  • ms excel是什么意思(microexcel是什么意思)

    ms excel是什么意思(microexcel是什么意思)

  • 荣耀20没有红外线吗(荣耀手机哪些有红外线功能)

    荣耀20没有红外线吗(荣耀手机哪些有红外线功能)

  • 手机打电话听筒声音小怎么回事(手机打电话听筒声音小免提正常)

    手机打电话听筒声音小怎么回事(手机打电话听筒声音小免提正常)

  • vivox27面部识别怎么设置(vivox27有面部识别)

    vivox27面部识别怎么设置(vivox27有面部识别)

  • discuz如何自主控制弹框的显示(discuz怎么添加diy模块)

    discuz如何自主控制弹框的显示(discuz怎么添加diy模块)

  • 增值税出口退税款缴纳企业所得税吗
  • 现金流量套期与什么无关
  • 公户的钱能买股票怎么处理
  • 申请电子发票需要交钱吗
  • 承兑汇票可以当现金用吗
  • 出售自用汽车的税率
  • 计提贷款利息是什么意思
  • 以前年度损益缴纳的税款在企业所得税中怎么表示
  • 企业收到的政府补贴交所得税吗
  • 三级科目称为子目吗
  • 银行利息收入确认时间会计与税法的差异
  • 转让专利技术使用权属于销售无形资产吗
  • 水利行政事业性收费收入会计分录
  • 计提长期借款利息会计分录
  • 公户没有开票进账了可以吗
  • 转让费入什么会计分录
  • 研发成功的产品卖出去怎么做账
  • 委托贷款利息收入怎么开发票
  • 金蝶k3外购入库单套打设置
  • 流氓软件怎么卸载?
  • 其他应收款对应的会计科目
  • php大小写转换函数怎么写
  • 利用的英文
  • 如何在qq好友旁边打字
  • 独资子公司如何注册
  • mac休眠模式
  • 竣工结算的依据有哪些?
  • 企业所得税中的其他业务收入包括
  • mac m1 rosetta编译
  • 国外供应商如何审核
  • thinkphp框架作用
  • php分段
  • 为什么我会选择那个对我一般的男人结婚
  • 企业什么时候才能按工龄退休
  • 织梦网站怎么添加关键词
  • 无偿受赠房屋 交个人所得税嘛
  • 无偿提供房屋使用证明有什么后果
  • 公对私转账没有到账怎么查询
  • 完税凭证是
  • 综合评价怎么改
  • sqlgun
  • 金税四期何时上线
  • 差旅费报销过程中会计和出纳分别做什么
  • 土地增值税要计入税金及附加吗
  • 计提增值税如何计算
  • 转出未交增值税借方余额表示什么
  • 应付账款与应付票据结合的原则
  • 政府补贴递延收益的摊销时间
  • 外汇申报国家代码表
  • 企业装卸费抵扣怎么做账
  • 收不回来的其他应收款如何坏账处理
  • w10预览版21343下载
  • 如何恢复win8系统
  • ubuntu安装指南
  • winxp系统停止服务
  • win10光驱无法识别
  • 苹果电脑使用u盾怎么用
  • 服务器centos版本选择
  • win8蓝牙设置在哪
  • 硬盘分区win7怎么扩充c盘
  • win8.1的开始菜单在哪
  • win10周年版
  • win10系统无法运行海岛大亨5
  • linux系统文件修复命令
  • 鼠标的指针
  • Cocos2dx ParticleEditor粒子编辑器
  • opengl绘制坐标轴
  • c# opengl 3d
  • bootstrap需要学多久
  • 网页设计绿色
  • shell脚本生成文件
  • js debounce实现
  • jquery如何做登录
  • 专项调查法
  • 河北省职称证书电子版
  • 建筑装饰业发票怎么开
  • 所得税与增值税区别
  • 当前土地增值税优惠政策
  • 没有代理记账资格的公司能代理记账吗
  • 税务干部工作纪实怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设