Hapi FHIR RestfulServer R4 Consent资源ID解析异常问题咨询
问题1根因与解决方案
你遇到的@ResourceParam注入的Consent实例ID为null是HAPI FHIR的默认行为:
- FHIR规范约定,资源的ID默认由服务端在Create操作时分配,因此HAPI FHIR的
RestfulServer默认会在解析Create请求的资源参数时,主动清空客户端上传的资源body中携带的ID字段,避免ID冲突。你手动解析原始请求JSON时没有框架的默认拦截逻辑,所以可以正常获取ID,这个现象和你定义的拦截器无关。
解决方案
如果你的业务场景确实需要允许客户端在Create请求时指定资源ID,只需在FHIRServlet的initialize方法中开启客户端指定ID的配置即可:
@Override protected void initialize() throws ServletException { setFhirContext(Configuration.getInstance().getFhirContext()); // 新增这一行,开启允许客户端分配ID的配置 setAllowClientAssignedIds(true); registerInterceptor(new PreprocessedRequestInterceptor()); setResourceProviders(List.of(new ConsentResourceProvider())); }
如果业务场景不允许客户端指定ID,你可以在业务逻辑中生成服务端ID后主动调用theConsent.setId()方法赋值,后续就能正常获取ID。
问题2补充说明
你采用的getFhirContext().getParserOptions().setStripVersionsFromReferences(false)配置是官方推荐的解决方案,该配置会禁止框架自动移除资源引用中的/_history/xxx版本后缀,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者ixM
相关产品推荐
相关产品推荐

