标签:
媒体类型:
text/html, text/plain, text/xml image/gif, image/jpg, image/png application/x-www-form-urlencodeed, application/json, application/xml 有q参数,q参数为媒体类型的质量因子,越大则优先权越高(从0到1) multipart/form-data
内容类型:Content-Type:MIME 有charset参数
服务器端有header, 客户端有Accept,扩展名,参数-ContentNegotiatingViewResolver(简单方法)
spring3.1通过consume和product来限定
窄化时是覆盖而非继承,其他(header,param)是继承
服务器端header详解
1、form get
@RequestMapping("/content") public ModelAndView showForm(@ModelAttribute("user") User user){ ModelAndView mv = new ModelAndView(); mv.setViewName("hello"); return mv; }
2、form post x
@RequestMapping(value="/content", method=RequestMethod.POST, headers="Content-Type=application/x-www-form-urlencoded") public ModelAndView request1(HttpServletRequest request){ //System.out.println("/content post"); String contentType=request.getContentType(); System.out.println("contentType:"+contentType); String characterEncoding=request.getCharacterEncoding(); System.out.println("characterEncoding:"+characterEncoding); System.out.println(request.getParameter("c")); ModelAndView mv = new ModelAndView(); mv.setViewName("success"); return mv; }
3、form post json
@RequestMapping(value="/content", method=RequestMethod.POST, headers="Content-Type=application/json") public void request2(HttpServletRequest request, HttpServletResponse response) throws IOException{ System.out.println("/json content post"); System.out.println("charset:"+request.getCharacterEncoding()); InputStream is = request.getInputStream(); byte bytes[] = new byte[request.getContentLength()]; is.read(bytes); String jsonStr = new String(bytes, request.getCharacterEncoding()); System.out.println("json data:"+jsonStr); ModelAndView mv = new ModelAndView(); mv.setViewName("success"); return mv; }
4、form post x ClientHttpRequest
@RequestMapping(value="/content", method=RequestMethod.POST, headers="Content-Type=application/x-www-form-urlencoded") public void request(HttpServletResponse response) throws IOException, URISyntaxException{ System.out.println("/x content post"); String url = "http://localhost:8080/springmvc/content"; ClientHttpRequest request = new SimpleClientHttpRequestFactory().createRequest(new URI(url), HttpMethod.POST); request.getHeaders().set("Content-Type", "application/json;charset=gbk"); String jsonData = "{\"username\":\"zhang\"}"; request.getBody().write(jsonData.getBytes("gbk")); request.execute(); System.out.println("status:"+response.getStatus()); response.setContentType("text/html;charset=utf-8"); response.getWriter().write("json response"); }
1-2正常情况
1-3没法设置json,所以1-4-3-4
2注释掉,因为get想直接到post x
ClientHttpRequest与真正的HttpServletResponse不同,有些方法不太一样。
客户端Accept
不太了解,client的方法
private static void jsonRequest() throws IOException, URISyntaxException { //请求的地址 String url = "http://localhost:9080/springmvc-chapter6/response/ContentType"; //①创建Http Request(内部使用HttpURLConnection) ClientHttpRequest request = new SimpleClientHttpRequestFactory(). createRequest(new URI(url), HttpMethod.POST); //②设置客户端可接受的媒体类型(即需要什么类型的响应体数据) request.getHeaders().set("Accept", "application/json"); //③发送请求并得到响应 ClientHttpResponse response = request.execute(); //④得到响应体的编码方式 Charset charset = response.getHeaders().getContentType().getCharSet(); //⑤得到响应体的内容 InputStream is = response.getBody(); byte bytes[] = new byte[(int)response.getHeaders().getContentLength()]; is.read(bytes); String jsonData = new String(bytes, charset); System.out.println("charset : " + charset + ", json data : " + jsonData); }
spring3.1
需要添加的bean
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
consumes = {application/json}; produces = {application/json}
标签:
原文地址:http://www.cnblogs.com/wang-jing/p/4574161.html