(我是java世界的新手)
我正在学习dropwizard,我想创建返回视图(html)或json的资源,具体取决于请求类型(ajax与否)
示例:
@Path("/")
public class ServerResource {
@GET
@Produces(MediaType.TEXT_HTML)
public MainView getMainView() {
return new MainView("Test hello world");
}
}
如果请求是AJAX,如何在相同的Path JSON响应中添加到此资源?
更新1。 我创造了这样的东西:
@Path("/")
public class ServerResource {
@GET
@Consumes(MediaType.TEXT_HTML)
@Produces(MediaType.TEXT_HTML)
public MainView getMainView(@HeaderParam("X-Requested-With") String requestType) {
return new MainView("hello world test!");
}
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<String> getJsonMainView() {
List<String> list = new ArrayList<String>();
for (Integer i = 0; i < 10; i++) {
list.add(i, "test" + i.toString());
}
return list;
}
}
看起来这是按预期工作的,但我知道这不是一个好习惯。
答案 0 :(得分:5)
Ajax请求USUALLY(不总是) X-Requested-With:XMLHttpRequest 请求标头。见How to differentiate Ajax requests from normal Http requests?
以下代码尚未经过测试。
@Path("/")
public class ServerResource {
@GET
@Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON})
public MainView getMainView(@HeaderParam("X-Requested-With") String requestType) {
if(requestType != null && requestType.equals("XMLHttpRequest")) {
//The request is AJAX
} else {
//The request is not AJAX
}
...
}
}
答案 1 :(得分:-1)
AJAX请求和服务器请求之间没有区别。它只是GET,POST,PUT,DELETE或HEAD。 如果你想分开输出,你应该在请求中以某种方式标记它,方法是添加查询参数或使用另一个URL或添加一些标题,然后在你的处理方法中进行解析。
希望这是有道理的。