0

我在从我的 Web 应用程序向我的 Web 服务传输数据时遇到了一些问题。

所以我有一个带有 Spring、Hibernate 和 Jackson 的 Java JAX-RS Web 服务。到目前为止,我已经使用 JSON-P 从 Web 服务获取数据,但现在我需要进行 POST 调用,所以我正在尝试切换到 CORS。

使用 JSON-P 的旧代码:

@GET
@Path("/getUsers")
@Produces(MediaType.APPLICATION_JSON)
public ResponseEntity getUsers(@QueryParam("callback") String callback) {
    Set<User> list = null;
    list = userBo.getUsers();
    if (list != null) {
        return callback + "(" + list.toString() + ");";
    } else {
        return null;
    }
}

我一直在尝试通过以下方式更改响应的标题:

@GET
@Path("/getUsers")
@Produces(MediaType.APPLICATION_JSON)
public ResponseEntity getUsers(@QueryParam("callback") String callback) {
    Set<User> list = null;
    list = userBo.getUsers();
    HttpHeaders headers = new HttpHeaders();
    headers.add("Access-Control-Allow-Origin", "*");
    headers.add("Access-Control-Allow-Methods", "GET, OPTIONS, POST");
    headers.add("Access-Control-Allow-Headers", "Content-Type");
return new ResponseEntity(list.toString(), headers, HttpStatus.OK);
}

但是 Jackson 将整个 ResponseEntity 转换为 JSON 字符串。任何人都知道如何在不让杰克逊全部转换的情况下更改标题?

谢谢!

4

2 回答 2

0

使用Response而不是ResponseEntity.

于 2012-05-23T10:29:19.170 回答
-1

您可以使用常规的 HTTP 过滤器来做到这一点:

public class AddHeaderFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

            HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper((HttpServletResponse)response)
            chain.doFilter(request, wrappedResponse);
            wrappedResponse.addHeader("myheaderName", "myHeaderValue");

        }


}
于 2012-05-23T10:32:20.657 回答