2016-03-08 78 views
0

我想了解哈啤Fhir REST風格的服務器是如何工作的,我想實現對觀測資源的一些@Search方法。如何實現Hapi Fhir服務器的觀察資源提供者的搜索操作?

目前,我有這個@Read操作,這當試圖訪問該資源(像這樣:http://localhost:8080/NewFHIRServer/fhir)成功的作品從瀏覽器:

@Read() 
public Observation readObservationById(@IdParam IdDt theId) { 
    for (Entry<Long, Deque<Observation>> entry : myPatientIdToObservations.entrySet()) 
    { 
     for (Observation obs : entry.getValue()) { 
      if (obs.getId().equals(theId)) { 
       return obs; 
      } 
     } 
    } 

    throw new ResourceNotFoundException(theId); 
}  

但是,當我嘗試做了類似的事情@搜索操作,我收到錯誤。我希望能夠得到通過運行這樣的(或類似)的搜索響應:

Bundle response = client 
     .search() 
     .forResource(Observation.class) 
     .where(Observation.SUBJECT.hasId("Patient/1")) 
     .execute(); 

我需要什麼樣的參數在我@Read方法,以使這成爲可能?現在我得到的錯誤是:

此服務器上的FHIR端點不知道如何處理GET 操作[觀察]與參數[主題]

,它是顯而易見的,爲什麼它不工作,因爲我的頭看起來像這樣:

public Observation searchObservationById(@IdParam IdDt theId)  

我一直在尋找的例子來揣摩了這一點,我不太明白這個參數的語法是指:

public List<Patient> getPatient(@RequiredParam(name = Patient.SP_FAMILY) StringParam theFamilyName)... 

您將如何進行查詢以使用最後一個示例?

謝謝

回答

1

要實現的搜索方法,你需要在方法使用@Search代替@Read。然後,使用與@OptionalParam@RequiredParam註釋零或更多的參數。

爲了讓您的具體實例的工作,你需要它實現了_id搜索參數的搜索方法,例如

@Search public List<Patient> getPatient(@RequiredParam(name = Patient.SP_RES_ID) StringParam theId) { }

+0

我已經能夠通過看你的GitHub的文件運行爲患者搜索,但我無法做的觀察一樣,因爲我不知道要放什麼的參數。其中,(...),以獲得捆綁,當我查詢,我不知道要放什麼東西在我的@Search功能的報頭(例如,查詢所有觀察與給定的患者ID)。有什麼文件可以用來找出這個問題嗎? – randombee

+0

要搜索資源的情況下,「A」,你想找到一個參考匹配資源「B」(例如找到一個給定主題的所有意見),你需要使用ReferenceParam。例如。 \t \t \t \t \t \t @OptionalParam(名稱= 「受試者」) \t \t \t ReferenceParam theSubject –