3

(我是java世界的新手)

我正在学习 dropwizard,我想根据请求类型(是否为 ajax)创建返回视图(html)或 json 的资源

例子:

@Path("/")
public class ServerResource {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public MainView getMainView() {
        return new MainView("Test hello world");
    }
}

如果请求是 AJAX,如何在同一路径 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;
    }
}

看起来这按预期工作,但我知道这不是一个好习惯。

4

2 回答 2

6

Ajax 请求通常(并非总是)具有X-Requested-With: XMLHttpRequest请求标头。请参阅如何区分 Ajax 请求和普通 Http 请求?

以下代码未经测试。

@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
        }
        ...
    }
}
于 2013-10-10T15:26:39.117 回答
0

AJAX-request 和只是请求服务器之间没有区别。它只是 GET、POST、PUT、DELETE 或 HEAD。如果你想分离输出,你应该在请求本身中以某种方式标记它,方法是添加查询参数或使用另一个 URL 或添加一些标头,然后在你的处理方法中解析。

希望这是有道理的。

于 2013-10-10T14:54:42.110 回答