zoukankan      html  css  js  c++  java
  • Spring MVC 关于controller的字符编码问题

    在使用springMVC框架构建web应用,客户端常会请求字符串、整型、json等格式的数据,通常使用@ResponseBody注解使 controller回应相应的数据而不是去渲染某个页面。如果请求的是非英文格式的字符串,往往在客户端显示的是乱码。原因是spring的 StringHttpMessageConverter默认的字符类型是iso8895-1 ‘西欧语言',中文等字符需要单独指定。

    这里总结几种解决方案:

    1.不使用@ResponseBody注解,使用HttpServeletResponse设置contentType属性

    @RequestMapping(value ="/rest/create/document") 
    public void create(Document document, HttpServletRespone respone) {
    repoonse.setContentType("text/plain;charset='utf-8'");
    response.write("中文string");
    }

    2.返回Response Entity object,设置contentType,例:

    @RequestMapping(value = "/rest/create/document") public ResponseEntity<String> create(Document document, HttpServletRespone respone) { 
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.add("Content-Type", "text/html; charset=utf-8");
    Document newDocument = DocumentService.create(Document);
    String json = jsonSerializer.serialize(newDocument);
    return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);
    }

    3.使用produces属性:

    @RequestMapping(value = "/rest/create/document",produces= "text/plain;charset=UTF-8") //返回的内容类型
    @ResponseBody
    public String create(Document document, HttpServletRespone respone) throws UnsupportedEncodingException { Document newDocument = DocumentService.create(Document);
    return jsonSerializer.serialize(newDocument);
    }

    @RequestMapping


    参数绑定(@RequestParam、 @RequestBody、 @RequestHeader 、 @PathVariable)


    package org.springframework.web.bind.annotation;

    import java.lang.annotation.Documented;

    import java.lang.annotation.ElementType;

    import java.lang.annotation.Retention;

    import java.lang.annotation.RetentionPolicy;

    import java.lang.annotation.Target;

    import org.springframework.web.bind.annotation.Mapping;

    import org.springframework.web.bind.annotation.RequestMethod;

    @Target({ElementType.METHOD, ElementType.TYPE})

    @Retention(RetentionPolicy.RUNTIME)

    @Documented

    @Mapping

    public @interface RequestMapping {

    String name() default "";

    String[] value() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};

    }

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    RequestMapping注解有六个属性。

    1、value, method;

    value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

    method: 指定请求的method类型, GET、POST、PUT、DELETE等;

    2、consumes,produces;

    consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

    produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

    3、params,headers;

    params: 指定request中必须包含某些参数值是,才让该方法处理。

    headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

  • 相关阅读:
    开源的UML建模工具
    leetcode 559. Maximum Depth of N-ary Tree
    leetcode 9. Palindrome Number
    暗网 tor溯源困难根因——用户的请求会在分布全球的主机随机跳转三次,最终才到达服务器,这就造成了溯源的极其困难
    leetcode 374. Guess Number Higher or Lower
    RDP协议暴力破解
    清华大学 pip 源
    暴力破解研究论文
    利用ModSecurity防御暴力破解
    IRC BOT原来是利用IRC下发C&C命令——在xx云环境遇到了,恶意软件开的是6666端口
  • 原文地址:https://www.cnblogs.com/jpfss/p/8780715.html
Copyright © 2011-2022 走看看