SpringMVC关于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 = ate(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 = ate(Document);validation框架
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值,才能让该⽅法处理请求。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。