文档章节

SpringMVC的返回字符串(JSON)乱码问题,以及Date类型字段转换为json时的问题

段英杰
 段英杰
发布于 2014/04/09 10:44
字数 485
阅读 382
收藏 4

web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="WebApp_ID" version="2.5">

     <display-name>extjs4</display-name>

    

     <context-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>classpath:beans.xml</param-value>

     </context-param>

    

     <listener>

         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

     </listener>

    

     <filter>

         <filter-name>CharacterEncodingFilter</filter-name>

             <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

         <init-param>

         <param-name>encoding</param-name>

             <param-value>utf-8</param-value>

         </init-param>

     </filter>

    

     <filter-mapping>

         <filter-name>CharacterEncodingFilter</filter-name>

         <url-pattern>/*</url-pattern>

     </filter-mapping>

    

     <servlet>

         <servlet-name>springmvc</servlet-name>

         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

     </servlet>

    

     <servlet-mapping>

         <servlet-name>springmvc</servlet-name>

         <url-pattern>*.do</url-pattern>

     </servlet-mapping>

</web-app>

springmvc-servlet.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:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop.xsd

    http://www.springframework.org/schema/tx

    http://www.springframework.org/schema/tx/spring-tx.xsd ">


     <context:annotation-config />

    

     <context:component-scan base-package="com.iduanyingjie.extjs4.controller" />

    

     <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

    

     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

         <property name="messageConverters">

             <list>

                 <ref bean="stringHttpMessageConverter" />

                 <ref bean="mappingJackson2HttpMessageConverter" />

             </list>

         </property>

     </bean>

    

     <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">

         <property name="supportedMediaTypes">

             <list>

                 <value>text/plain;charset=utf-8</value>

             </list>

         </property>

     </bean>

    

     <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

         <property name="supportedMediaTypes">

             <list>

                 <value>application/json</value>

             </list>

         </property>

     </bean>

    

     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />

         <property name="prefix" value="/jsp/" />

         <property name="suffix" value=".jsp" />

     </bean>


</beans>


UserController.java:

import java.util.Date;

import java.util.List;


import javax.annotation.Resource;


import net.sf.json.JSONArray;

import net.sf.json.JsonConfig;

import net.sf.json.processors.JsonDateValueProcessor;


import org.springframework.stereotype.Controller;

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

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

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

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


import com.iduanyingjie.extjs4.domain.User;

import com.iduanyingjie.extjs4.service.IUserService;


@Controller

@RequestMapping(value = "/UserController/")

public class UserController {


     @Resource(name = "userService")

     private IUserService userService;


     @RequestMapping(value = "getUserList.do", produces = "text/plain;charset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST })

     @ResponseBody

     public String getUserList() {

         System.out.println("UserController/getUserList");

         List<User> userList = userService.findAll();

    

         JsonConfig jsonConfig = new JsonConfig();

         jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());

    

         return "{\"total\":"

                      + userList.size()

                      + ", \"rows\":"

                      + JSONArray.fromObject(userList, jsonConfig).toString() + "}";

     }


     @RequestMapping(value = "save.do", method = { RequestMethod.GET, RequestMethod.POST })

     @ResponseBody

     public void save(@RequestBody User user) {

         System.out.println(user);

     }


}

JsonDateValueProcessor.java

package net.sf.json.processors;


import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;


import net.sf.json.JsonConfig;


public class JsonDateValueProcessor implements JsonValueProcessor {


     private String datePattern = "yyyy-MM-dd";


     private SimpleDateFormat sdf = new SimpleDateFormat(datePattern, Locale.UK);


     public JsonDateValueProcessor() {

         super();

     }


     public JsonDateValueProcessor(String format) {

         super();

         this.datePattern = format;

     }

    

     @Override

     public Object processArrayValue(Object value, JsonConfig jsonConfig) {

         return process(value);

     }

    

     @Override

     public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {

         return process(value);

     }

    

     private Object process(Object value) {

         try {

             if (value instanceof Date) {

                 return sdf.format((Date) value);

             }

             return value == null ? "" : value.toString();

         } catch (Exception e) {

             return "";

         }

    

     }

    

     public String getDatePattern() {

         return datePattern;

     }

    

     public void setDatePattern(String pDatePattern) {

         datePattern = pDatePattern;

     }


}


© 著作权归作者所有

段英杰
粉丝 2
博文 3
码字总数 893
作品 0
丰台
程序员
私信 提问
加载中

评论(0)

Spring MVC返回json字符串时数据格式化

在运用Spring MVC框架开发时,可以直接在方法上添加注解 @ResponseBody 返回JSON数据,如果javabean的属性中包含Date日期类型的数据,默认的转换格式并不是我们想要的 yyyy-MM-dd 这样的格式...

云颖
2014/01/22
3.7K
0
SpringMVC使用@ResponseBody时返回json的日期格式、@DatetimeFormat使用注意

一、SpringMVC使用@ResponseBody时返回json的日期格式 前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它......

keppy
2018/04/21
281
0
SpringMVC 返回中文字符串时乱码

SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是当返回值是String的时候,中文会乱码,原因是因为其中字符串转换和对象转换用的是两个转换器,而String的转换...

费氏家族
2017/10/30
49
0
一文读懂SpringMVC中的数据绑定

Struts2 和 SpringMVC 都是 Web 开发中视图层的框架,两者都实现了数据的自动绑定,都不需要我们手动获取参数然后关联到对应的属性上,下面就谈谈两者的区别。 Spring MVC 是基于方法的,通过...

Java高级技术
2018/09/26
0
0
SpringMVC3的ResponseBody返回字符串(JSON)乱码问题解决

近日做一个小项目,用spring mvc 做到ajax请求获取jquery ztree 异步获取树返回json对象时出现了乱码,试了各种办法,查了各种资料,一开始以为是数据库的编码有问题,经测试没问题,又以为是...

guhai2004
2013/10/18
1.6W
6

没有更多内容

加载失败,请刷新页面

加载更多

舞钢哪里可以开餐饮费发票-中国新闻网

舞钢哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723687
29分钟前
38
0
偃师哪里可以开餐饮费发票-中国新闻网

偃师哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723685
30分钟前
24
0
荥阳哪里可以开餐饮费发票-中国新闻网

荥阳哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723617
30分钟前
23
0
登封哪里可以开餐饮费发票-中国新闻网

登封哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17060820048
31分钟前
21
0
新密哪里可以开餐饮费发票-中国新闻网

新密哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723479
31分钟前
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部