<?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 {@Autowiredprivate 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 控制器自定义 HTTP 状态码、响应类型或者异常错误
- 除了使用服务层的实体控制外 , 还可以在控制器层使用自定义的 DTO 对返回实体的信息做进一步控制
文中使用的 Jmix 版本:1.3.1
经验总结扩展阅读
- 被看上就跑不掉了,爱情中最有手段的四大星座女
- 中国世界著名的旅游景点有哪些
- 外国人在中国可以炒股吗
- 狗吃多少葡萄才能中毒
- 活珠子有细菌吗
- 心中播下爱情种子,就会慢慢去经营的星座
- 语文中插叙摇摆的区别
- 爱情中十分讨厌被对方冷落的星座
- 老中医人物结局
- 感情中一味讨好,完全放下自尊的星座女