Java 如何在春天实现自己的工厂
我有三种或更多类型的请求,它们以JSON数据的形式出现并转换为object 假设有一个请求:Java 如何在春天实现自己的工厂,java,spring,design-patterns,Java,Spring,Design Patterns,我有三种或更多类型的请求,它们以JSON数据的形式出现并转换为object 假设有一个请求: { "id":1, "type":"0", "url": "http://stackoverflow.com" } 我想建立某种连接工厂,让我可以得到这样的页面: Request request = new Request(json); Response response = request.execute(); 当然,execute方法对于每个请求类型都有不同的实现 我有一个用纯J
{
"id":1,
"type":"0",
"url":
"http://stackoverflow.com"
}
我想建立某种连接工厂,让我可以得到这样的页面:
Request request = new Request(json);
Response response = request.execute();
当然,execute
方法对于每个请求类型都有不同的实现
我有一个用纯JavaSE编写的原型,我想迁移到Spring框架,如果我的代码有问题,我也会得到一些反馈。首先,我构建了一个SimpleRequest
,它只获取页面并返回正文
class SimpleRequest implements Request{
Package requestData;
@Override
public Connection.Response execute() throws IOException {
Connection.Response response = Jsoup
.connect(requestData.getUrl())
.execute();
return response;
}
public void bind(Package requestData){
this.requestData = requestData;
}
}
此方法仅获取页面。没什么有趣的
我还有准备请求的RequestTemplate
:
class RequestTemplate{
Package requestData;
RequestFactory requestFactory = new RequestFactory();
Request request;
public RequestTemplate(Package requestData){
this.requestData = requestData;
try {
request = requestFactory.getRequestInstance(requestData.getType());
request.bind(requestData);
}catch (Exception e){
e.printStackTrace();
}
}
public Connection.Response execute(){
Connection.Response connection = null;
try{
connection = request.execute();
}catch (Exception e){
e.printStackTrace();
}
return connection;
}
}
此方法基于RequestType
获取对象
当然,我有RequestFactory
,它有对象的描述并创建它们的新实例
class RequestFactory{
public Request getRequestInstance(RequestType type) throws Exception {
switch (type){
case SIMPLE:
return new SimpleRequest();
default:
throw new Exception("Error");
}
}}
因此,我们检查与枚举列表匹配的RequestType
类型,并返回新实例
我还想在基于Spring框架的小项目中实现类似的东西,有两个问题
谢谢 在什么意义上,这是更可取的,比如说,一个@Controller,它执行所有绑定,可能使用您自己的DataBinder,这样您的控制器方法就变成了
public executersponse handleMyRequest(FirstRequest req)
。看@Koosgadelala,我想我不明白什么。序列化json并绑定它没有问题。我使用gson来管理任务。这个问题与工厂和模板有关……我还认为,controller
annotation只是一个Web应用程序,但我的应用程序是一个没有rest的独立应用程序。作为一个客户端,您是否查看了Spring的RestTemplate并注册了一些额外的HttpMessageConverter
来构建您的响应?