51 lines
2.1 KiB
Markdown
51 lines
2.1 KiB
Markdown
# GET /crosses
|
||
|
||
> 来源:BrAPI v2.1 校验报告(03-fix.md)
|
||
|
||
## 概要
|
||
|
||
| 项 | 值 |
|
||
| --- | --- |
|
||
| 状态 | warning |
|
||
| 方法 | GET |
|
||
| URL | `/brapi/v2/crosses` |
|
||
| 完整 URL | `http://localhost:8081/brapi/v2/crosses` |
|
||
| 路径模板 | `GET /crosses` |
|
||
| 模块 | Crosses |
|
||
| 响应时间 | 18958 ms |
|
||
|
||
## 校验详情
|
||
|
||
```
|
||
GET /crosses
|
||
Crosses
|
||
18958 ms
|
||
schema mismatch
|
||
schema mismatch
|
||
Json matches schema: schemas/v2.1/metadata.json (schema mismatch) — Schema: schemas/v2.1/metadata.json
|
||
Server response is not valid JSON.
|
||
Json matches schema: schemas/v2.1/Crosses/getCrossesResponse.json (schema mismatch) — Schema: schemas/v2.1/Crosses/getCrossesResponse.json
|
||
Server response is not valid JSON.
|
||
```
|
||
|
||
---
|
||
|
||
## 修复说明
|
||
|
||
- **根因**:
|
||
- `additional_info.value` 中 Java 序列化的 `Boolean.TRUE` 经 `getAdditionalInfoMap()` 直接输出为 JSON boolean,违反 BrAPI schema(`additionalInfo` 值须为 string)。
|
||
- 匿名请求的 metadata 写入 `Long.MAX_VALUE` 对应的 token 过期 WARNING(年份溢出),导致 `metadata.json` 校验失败。
|
||
- 响应体含 `"@context": null`,严格 schema 校验不接受。
|
||
- `GET /crosses` 列表查询存在 N+1 懒加载,响应耗时过长(~19s),校验器易超时并报告 not valid JSON。
|
||
- **修复**:
|
||
- `BrAPIPrimaryEntity.getAdditionalInfoMap()` 使用 `String.valueOf()` 统一转为字符串(共用修复)。
|
||
- `BrAPIController.getStatusMessages()` 匿名用户跳过 token WARNING,且忽略超出合理范围(>2100 年)的过期时间。
|
||
- `BrApiJacksonConfig` + `BrApiJsonResponseAdvice` 序列化时省略 null 字段(如 `@context`)。
|
||
- `CrossService.prefetchAssociations()` 用 JOIN FETCH 批量预加载 crossingProject、parents、pollinationEvents 等关联,消除 N+1 查询。
|
||
- `CrossService.convertFromEntity()` 对缺少 `:` 的 crossAttributes 做安全解析,避免 500 纯文本错误响应。
|
||
- **验证**:`GET /brapi/v2/crosses` 响应可正常解析为 JSON;`additionalInfo.dummyData` 为字符串;无 `@context: null`;cross1 等种子数据字段完整。
|
||
|
||
---
|
||
|
||
**状态:已完成**
|