问题描述
我将程序从hapishir's website的示例中提取出来,并且该操作有效,因为我收到JSON正文并正在更新数据库。我遇到的问题是没有响应被返回。我建立了Methodoutcome对象,然后“返回”它,但是邮递员中什么也没有出现。我也编写了@read和@Search操作,它们都在Postmat的响应中返回资源,但是此@Create不返回任何响应。
ObservationResourceProvider.java
public class ObservationResourceProvider implements IResourceProvider {
public ObservationResourceProvider() { }
@Override
public Class<? extends IBaseResource> getResourceType() {
return Observation.class;
}
@Create()
public Methodoutcome createObservation(@ResourceParam Observation observation){
OpenERMDatabase db = new OpenERMDatabase();
String newObservationId = db.addNewObservation(observation);
//return the new Id if success else return an error message
Methodoutcome retVal = new Methodoutcome();
if (newObservationId != null) {
retVal.setId(new IdType("Observation",newObservationId,"1.0"));
retVal.setCreated(true);
}else {
OperationOutcome outcome = new OperationOutcome();
outcome.addissue().setDiagnostics("An Error Occurred");
retVal.setoperationOutcome(outcome);
retVal.setCreated(false);
}
return retVal;
}
}
SimpleRestfulServer.java
@WebServlet("/*")
public class SimpleRestfulServer extends RestfulServer{
//Initialize
@Override
protected void initialize()throws servletexception{
//create a context for the appropriate version
setFhirContext(FhirContext.forDstu3());
//Register Resource Providers
registerProvider(new PatientResourceProvider());
registerProvider(new ObservationResourceProvider());
}
}
解决方法
我已经建立了一个环境并调试了服务器端代码。 我相信您会从this得到一些提示。 PreferReturnEnum中定义了三种模式,当您在HEADERS中指定一个额外的头,其键为“ Prefer”且值为“ return = OperationOutcome”时,在operationOutcome中定义的值将被撤消。