使用变换器时,如何从spark向响应添加标头

时间:2014-11-12 19:35:03

标签: java java-8 spark-java

我有这个:

get ("/test", (req, resp) -> {
    return repository.getAll();
}, new JsonTransformer());

我的变压器看起来像:

public class JsonTransformer implements ResponseTransformer {

    ObjectMapper om = new ObjectMapper();

    public JsonTransformer() {
    }

    @Override
    public String render(Object o) throws Exception {
        return om.writeValueAsString(o);
    }
}

我尝试使用标题功能在响应中添加标题,如下所示:

get ("/test", (req, resp) -> {
    resp.header("Content-Type", "application/json");
    return repository.getAll();
}, new JsonTransformer());

我试过这个,我在文档中找到了: 我认为这设置了accept-type

get ("/test", "application/json", (req, resp) -> {
    return repository.getAll();
}, new JsonTransformer());

但我无处{{​​1}} application/json标题

3 个答案:

答案 0 :(得分:14)

经过研究,我发现了一种解决这个问题的优雅方法,我创建了一个before方法。

before((request, response) -> response.type("application/json"));

这会将响应类型添加到json。

您可以在路线后添加它,但以后可能会变得麻烦。 thx albertjan为您提示:)

答案 1 :(得分:5)

您可以使用Content-Type函数设置响应的response.type,如下所示:

get("test", (req, resp) -> {
    resp.type("application/json");
    return repository.getAll() 
}, new JsonTransformer());

答案 2 :(得分:2)

第三种选择是使用后过滤器:

after((request, response) -> response.type("application/json"));

请参阅:http://sparkjava.com/documentation#filters