spring mvc.xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!--<import resource="classpath:config/spring-controllers.xml"/>--> <!--<import resource="classpath:config/spring-servlet.xml"/>--> <context:annotation-config/> <!-- 使用默认的注解映射 --> <mvc:annotation-driven/> <!--<context:component-scan base-package="com.hank.framework.*"/>--> <!-- 扫描业务组件,让spring不扫描带有@Service注解的类(留在root-context.xml中扫描@Service注解的类),防止事务失效 --> <context:component-scan base-package="com.iw.msg.Jpush"> <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>--> </context:component-scan> <!-- 配置静态资源 --> <mvc:default-servlet-handler/> <!--<mvc:resources location="resources" mapping="/*"/>--> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/view/"/> <property name="suffix" value=".jsp"/> </bean> <!-- json转换器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="jsonMessageConverter"/> </list> </property> </bean> <!-- Configure bean to convert JSON to POJO and vice versa --> <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> </bean> <!--fileUpload <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="10485760000"></property> <property name="maxInMemorySize" value="40960"></property> </bean>--> </beans> web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 加载配置信息 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:config/spring.xml </param-value> </context-param> <!-- Spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 防止Spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- Spring MVC servlet --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> test.java public static String doPost(String urlStr, String paramStr) throws Exception { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); //conn.setDoInput(true); conn.setDoOutput(true); //必须为true //if (token != null) { // conn.setRequestProperty("token", token); // } if (paramStr != null) { OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); // 把数据写入请求的Body out.write(paramStr); out.flush(); out.close(); } BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")); String line; String result = ""; while ((line = br.readLine()) != null) { result += line; } System.out.println(result); br.close(); return result; } 通过main调用成功 中文没问题 然后再在这个上面包一层 controll 确报http 400跟踪springmvc 后发现 是com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xb8 at [Source: java.io.PushbackInputStream@a8360d; line: 1, column: 88]引起的 最后通过修改 OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());为 OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(),"utf-8"); 解决
springmvc 开rest 接收 json数据 报400错
猜你喜欢
转载自weihong01267.iteye.com/blog/2289224
今日推荐
周排行