codecamp

REST 处理编码问题

处理中文乱码

我们一般都会将项目和代码的编码格式设置为 UTF-8 ,但是尽管如此,有时还是会出现乱码的情况,怎么办?

我们在 handle-json-xml项目的基础上,进行修改成为另外一个新项目。

将 MyResource.java 改为如下:

@Path("myresource")
public class MyResource {

    /**
     * 方法处理 HTTP GET 请求。返回的对象以"text/plain"媒体类型
     * 给客户端
     *
     * @return String 以 text/plain 形式响应
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }


    /**
     * 方法处理 HTTP GET 请求。返回的对象以"application/xml"媒体类型
     * 给客户端
     *
     * @return MyPojo 以 application/xml 形式响应
     */
    @GET
    @Path("pojoxml")
    @Produces(MediaType.APPLICATION_XML)
    public MyBean getPojoXml() {
        MyBean pojo = new MyBean();
        pojo.setName("欢迎光临:waylau.com");
        pojo.setAge(28);
        return pojo;
    }

    /**
     * 方法处理 HTTP GET 请求。返回的对象以"application/json"媒体类型
     * 给客户端
     *
     * @return MyPojo 以 application/json 形式响应
     */
    @GET
    @Path("pojojson")
    @Produces(MediaType.APPLICATION_JSON)
    public MyBean getPojoJson() {
        MyBean pojo = new MyBean();
        pojo.setName("欢迎光临:waylau.com");
        pojo.setAge(28);
        return pojo;
    }

}

启动项目,访问浏览器 http://localhost:8080/, 点击“POJO JSON” 或者 “POJO XML”,显示如下,中文已乱。

encoding-format-01

问题解决

在返回的数据里面,我们设置编码格式 charset=utf-8,关键代码如下:

private final static String CHARSET_UTF_8 = "charset=utf-8";

@GET
@Path("pojoxml")
@Produces(MediaType.APPLICATION_XML + ";" + CHARSET_UTF_8)
public MyBean getPojoXml() {
    MyBean pojo = new MyBean();
    pojo.setName("欢迎光临:waylau.com");
    pojo.setAge(28);
    return pojo;
}

@GET
@Path("pojojson")
@Produces(MediaType.APPLICATION_JSON + ";" + CHARSET_UTF_8)
public MyBean getPojoJson() {
    MyBean pojo = new MyBean();
    pojo.setName("欢迎光临:waylau.com");
    pojo.setAge(28);
    return pojo;
}

再次访问浏览器,查看到所有的中文显示都正常了。

encoding-format-02


REST 处理 JSON 和 XML
REST 使用Java SE部署环境
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }