4.1.4.4 string类型

以下要求适用于固定长度和动态长度字符串。

应该支持这几种编码格式:UTF-8,UTF-16BE and UTF-16LE.

UTF-16LE和UTF-16BE字符串应以“\0”字符零结尾。这意味着它们应以(至少)两个0x00字节结尾

UTF-16LE和UTF-16BE字符串的长度应均匀。

最后一个字节长度为奇数的UTF-16LE和UTF-16BE字符串应被忽略。之前的两个字节应为0x00字节(终止)。

所有字符串应始终以字节顺序标记(BOM)开头。BOM应包含在固定长度字符串和动态长度字符串中。BOM允许检测使用的编码。

4.1.4.4.1 string(固定长度)

字符串应以“\0”字符结尾,尽管长度固定。

必须在数据类型定义中指定 以字节为单位 的字符串长度(包括“\0”)。使用“\0”填充未使用的空间。BOM包含在长度中。

如果固定长度字符串的长度大于预期值(预期值应基于数据类型定义),则应中止反序列化,并将消息视为格式错误。

如果固定长度字符串的长度小于预期值(预期值应基于数据类型定义),并且使用“\0”正确终止,则应接受该字符串。

如果固定长度字符串的长度小于预期长度(预期值应基于数据类型定义),并且未使用“\0”正确终止,则应中止反序列化,并将消息视为格式错误。

4.1.4.4.1 string(动态长度)

具有动态长度的字符串应以length field(长度场)开头。长度以字节为单位。

长度字段放置在BOM表之前,BOM表包含在长度中。

字符串以“\0”结尾。

字符串的最大字节数(包括以“\0”结尾的字节数)也应从数据类型定义中得出。

动态长度字符串的长度字段应为8、16或32位。这应由配置决定。

如果未配置,则添加在字符串前面的length field长度为32位(长度字段的默认长度)。【默认四字节】

length field的值中不考虑字符串length field长度;即lengthfield不对自身进行计数。

如果具有可变长度的字符串的长度大于预期值(预期值应基于数据类型定义),则应中止反序列化,并将消息视为格式错误。

除了将应用程序字符串作为带有BOM和“\0”端接的SOME/IP字符串进行传输之外,还可以将字符串作为没有BOM和“\0”端接(参见第4.1.4.5.2章)的纯动态长度数组进行传输。请注意,这需要在应用程序中进行完整的字符串处理(例如,端接转换)。

这也可以通过将属性implementsLegacyStringSerialization设置为true来实现。在CP中,此属性在SOMEIPTransformationISignalProps中配置,而在AP中,则在ApSomeipTransformationProps中进行配置。

注意!此属性不是未来安全的,将在即将发布的AUTOSAR版本中删除!

因此,为了向前兼容,在这种情况下最好使用纯动态长度数组

@Service public class SearchService implements ISearchService { @Autowired private RestHighLevelClient client; @Autowired private RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.200.130:9200"))); // 分页搜索 @Override public PageDto<ItemDoc> search(SearchDto params) throws Exception { // 1.创建对象 SearchRequest request = new SearchRequest("item"); // 2.准备DSL // query String key = params.getKey(); if (key == null || "".equals(key)) { request.source().query(QueryBuilders.matchAllQuery()); } else { request.source().query(QueryBuilders.matchQuery("all", key)); } // 排序 sort request.source().sort("spec", SortOrder.ASC); // 分页 request.source().from((params.getPage() - 1) * params.getSize()).size(20); // 3.发送请求 SearchResponse search = client.search(request, RequestOptions.DEFAULT); // 4.解析响应 return handleResponse(search); } private PageDto<ItemDoc> handleResponse(SearchResponse search) { // 4.解析响应 SearchHits searchHits = search.getHits(); // 4.1.获取总条数 long total = searchHits.getTotalHits().value; // 4.2.文档数组 SearchHit[] hits = searchHits.getHits(); // 4.3.遍历 List<ItemDoc> items = new ArrayList<>(); for (SearchHit hit : hits) { // 获取文档source String json = hit.getSourceAsString(); // 反序列化 ItemDoc itemDoc = JSON.parseObject(json, ItemDoc.class); // 放入集合 items.add(itemDoc); } // 4.4.封装返回 return new PageDto(total, items); }
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whs_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值