zoukankan      html  css  js  c++  java
  • ResponseBody的使用

    使用Spring的@ResponseBody有时还是挺方便的,在ajax调用返回纯字符串时有中文编码问题。
    @ResponseBody
    @RequestMapping(value="/decode", produces=MediaType.TEXT_PLAIN_VALUE+";charset=utf-8")
    public String decode(HttpServletResponse response, @RequestParam String token) {
        return "大家好";
        //return new String("大家好".getBytes("utf-8"),"iso-8859-1");
        //如果不指定utf-8编码,麻烦一点转成iso-8859-1的字符串也行
    }
    参考spring源码:StringHttpMessageConverter会从MediaType获取编码(分析charset参数),默认是ISO-8859-1不支持中文。
        private Charset getContentTypeCharset(MediaType contentType) {
            if (contentType != null && contentType.getCharSet() != null) {
                return contentType.getCharSet();
            }
            else {
                return DEFAULT_CHARSET;
            }
        }
        public Charset getCharSet() {
            String charSet = getParameter(PARAM_CHARSET);//charset
            return (charSet != null ? Charset.forName(charSet) : null);
        }
     
    还有一种使用场景就是实现服务端接口返回json文本数据,MappingJacksonHttpMessageConverter默认就是utf-8编码
    @RequestMapping(value="/api/item/getMallItem.json",produces=MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public Object getMallItem(HttpServletRequest request,Model model){
        model.addAttribute("status", 0);
        return model;
    }
    MappingJacksonHttpMessageConverter,部分源码:
        protected JsonEncoding getJsonEncoding(MediaType contentType) {
            if (contentType != null && contentType.getCharSet() != null) {
                Charset charset = contentType.getCharSet();
                for (JsonEncoding encoding : JsonEncoding.values()) {
                    if (charset.name().equals(encoding.getJavaName())) {
                        return encoding;
                    }
                }
            }
            return JsonEncoding.UTF8;
        }




  • 相关阅读:
    Oracle Database Instant Client 11g 32位和64位 安装包发布
    安装64位的oracle连接客户端
    Angularjs 与Ckeditor
    C# 通讯网关开发
    NServiceBus 入门2
    来自 Repository 的一丝线索,Domain Model 再重新设计
    jquery插件-自定义select
    微软Visual Studio "14" CTP 2 发布
    程序员喜欢怎样的职位描述?(转)
    kill命令"-1"这个参数到底是杀进程还是reload?(转)
  • 原文地址:https://www.cnblogs.com/xingqi/p/3412815.html
Copyright © 2011-2022 走看看