我正在使用RestEasy和Spring 4创建REST服务。
该服务基本上是复杂批处理的端点。因此客户端调用服务传递一堆参数,然后触发处理。
由于最初传递给服务的参数很多,并且这些参数几乎在系统的各个地方使用,我选择创建一个帮助者'将保存参数的bean,然后每个其他bean都可以自动装配'参数bean'并使用它。
示例:
客户端调用的网址为:http://localhost/rest/service/execute?processType=A&initialDate=20141220&finalDate=20141231......
REST服务端点类似于:
@Path("/service")
public class RESTService {
@Autowired
private RequestParams params;
@Autowired
private ProcessOrchestrator orchestrator;
@POST
@Path("/execute")
@Produces(MediaType.TEXT_PLAIN)
public Response executa(
@NotNull @QueryParam("processType") String processType,
@NotNull @QueryParam("initialDate") String initialDate,
@NotNull @QueryParam("finalDate") String finalDate,
...
) {
params.setProcessType(processType);
params.setInitialDate(initialDate);
params.setFinalDate(finalDate);
orchestrator.triggerBatchProcess();
}
}
RequestParams bean只保存参数值:
@Component
public class RESTService {
private String processType;
private String initialDate;
private String finalDate;
...
// getters and setters
}
其他bean将@Autowire params bean并使用其参数:
@Component
public class DataProcessor {
@Autowire
private RequestParams params;
//...
}
@Component
public class DataConverter {
@Autowire
private RequestParams params;
//...
}
@Component
public class FileWritter {
@Autowire
private RequestParams params;
//...
}
设计看起来正确,对吧?现在,我关注的是:如何确保每次调用服务时都创建一个新的RequestParams
实例?我是否需要为所有bean声明范围("请求"例如)?