相关疑难解决方法(0)

如何使用JAX-RS设置charset?

如何使用JAX-RS设置charset?我已经尝试@Produces("text/html; charset=UTF-8")但是被忽略了,只有text/htmlHTTP头发送.我想在MessageBodyWriter中设置charset,但不希望通过我自己的反射分析@Produces注释来提取媒体类型.

java jax-rs character-encoding java-ee

51
推荐指数
4
解决办法
7万
查看次数

泽西网络服务json utf-8编码

我使用Jersey 1.11制作了一个小型的Rest Web服务.当我调用返回Json的url时,非英文字符的字符编码存在问题.Xml的相应url("test.xml"在启动的xml-tag中使其成为utf-8.

如何让网址"test.json"返回utf-8编码的响应?

这是服务的代码:

@Stateless
@Path("/")
public class RestTest {   
    @EJB
    private MyDao myDao;

    @Path("test.xml/")
    @GET
    @Produces(MediaType.APPLICATION_XML )
    public List<Profile> getProfiles() {    
        return myDao.getProfilesForWeb();
    }

    @Path("test.json/")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Profile> getProfilesAsJson() {
        return myDao.getProfilesForWeb();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是服务使用的pojo:

package se.kc.mimee.profile.model;

@XmlRootElement
public class Profile {
    public int id;
    public String name;

    public Profile(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public Profile() {}

}
Run Code Online (Sandbox Code Playgroud)

java jersey character-encoding

45
推荐指数
4
解决办法
8万
查看次数

查找使用servlet过滤器将内容插入响应的示例

我一直在搜索net和stackoverflow,以获取使用servlet过滤器将内容插入响应的示例,但只能找到捕获/压缩输出和/或更改标头的人的示例.我的目标是在所有HTML响应的结束</ body>之前附加一大块HTML.

我正在研究扩展HttpServletResponseWrapper的解决方案,以使用我自己的PrintWriter,然后覆盖其上的write方法.在write方法中,我存储了最后7个字符,看它是否等于关闭body标签,然后我写了我的HTML块加上关闭的body标签,然后继续对文档的其余部分进行正常的写操作.

我觉得有人必须已经解决了这个问题,而且可能比我更优雅.我很欣赏如何使用servlet过滤器将内容插入响应的任何示例.

更新

回应评论,我也试图从http://www.oracle.com/technetwork/java/filters-137243.html实现CharResponseWrapper .这是我的代码:

PrintWriter out = response.getWriter();
CharResponseWrapper wrappedResponse = new CharResponseWrapper(
        (HttpServletResponse)response);

chain.doFilter(wrappedRequest, wrappedResponse);
String s = wrappedResponse.toString();

if (wrappedResponse.getContentType().equals("text/html") &&
        StringUtils.isNotBlank(s)) {
    CharArrayWriter caw = new CharArrayWriter();
    caw.write(s.substring(0, s.indexOf("</body>") - 1));
    caw.write("WTF</body></html>");
    response.setContentLength(caw.toString().length());
    out.write(caw.toString());
}
else {
    out.write(wrappedResponse.toString());
}

out.close();
Run Code Online (Sandbox Code Playgroud)

我也在包装请求,但该代码有效,不应影响响应.

java tomcat6 servlet-filters

33
推荐指数
2
解决办法
7万
查看次数

ServletResponse和HttpServletResponseWrapper之间的区别?

我是servlet的新手,并阅读有关过滤器和包装器的一些文本.我可以理解过滤器,但对包装器感到困惑.在书中,作者给出了一个例子:

如果没有包装:

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

        String name = request.getParameter("name").trim();

        try {
            chain.doFilter(request, response);
            PrintWriter out = response.getWriter();
            if (name.length() == 0) {
                out.println("Some message");
                out.println("</body>");
                out.println("</html>");
                out.close();
            }
        } catch (Throwable t) {
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果是包装:

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

        String name = request.getParameter("name").trim();

        HttpServletResponse httpRes = (HttpServletResponse) response;
        HttpServletResponseWrapper resWrapper = new HttpServletResponseWrapper(httpRes);
        try {
            chain.doFilter(request, response);

            PrintWriter out = resWrapper.getWriter(); // …
Run Code Online (Sandbox Code Playgroud)

java servlets wrapper servlet-filters

13
推荐指数
2
解决办法
2万
查看次数

如何根据Content-type添加响应头; 在提交响应之前获取Content-type

我想Expires为所有image/*和设置标题text/css.我正在这样做Filter.然而:

  • 在调用chain.doFilter(..)Content-type 之前还没有"实现"
  • 调用chain.doFilter(..)Content-type 后,内容长度也是如此,禁止添加新标题(至少在Tomcat实现中)

我可以使用所请求资源的扩展,但由于某些css文件是由richfaces通过从jar文件中获取而生成的,因此文件的名称不是x.css,但是/xx/yy/zz.xcss/DATB/....

那么,有没有办法在提交响应之前获取Content-type.

java tomcat servlets

8
推荐指数
1
解决办法
4697
查看次数

如何覆盖泽西客户端中的响应头

我有一个球衣客户端,我试图解组一个响应实体.问题是远程Web服务发送回application/octet-stream作为内容类型,因此Jersey不知道如何解组它(我有类似的错误,text/html回来用于XML等).我无法更改Web服务.

我想要做的是覆盖内容类型并将其更改为application/json,以便jersey知道要使用哪个编组器.

我无法使用json marshaller注册application/octet-stream,因为对于给定的内容类型,我实际上可能会找回各种奇怪的东西.

rest json jersey

2
推荐指数
1
解决办法
4141
查看次数