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值,才能让该方法处理请求。

  • 相关阅读:
    Entity Framework Core 2.0 新特性
    asp.net core部署时自定义监听端口,提高部署的灵活性
    asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
    使用xshell连接服务器,数字键盘无法使用解决办法
    使用Jexus 5.8.2在Centos下部署运行Asp.net core
    【DevOps】DevOps成功的八大炫酷工具
    【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
    【Network】UDP 大包怎么发? MTU怎么设置?
    【Network】高性能 UDP 应该怎么做?
    【Network】golang 容器项目 flannel/UDP相关资料
  • 原文地址:https://www.cnblogs.com/jpfss/p/8780715.html
Copyright © 2011-2022 走看看