SpringMVC 解决中文乱码问题以及前后端Json格式数据交互的测试
1.今日遇到的报错:
跳转网页出现404原因:
1.检查project structure里面的webapp路径是否正确;
2.检查project structure里的artifaccts里的WEB-INF下是否有lib目录;
3.考虑是不是maven静态资源没有导出
form表单提交后一直无法跳转到对应的url页面:
因为配置tomcat时有写完整项目名,跳转后项目名被自动抹去,导致url不正确
2.解决客户端提交表单后响应回给客户端的数据出现中文乱码的问题
添加过滤器类filter.java
public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); System.out.println("==========="); chain.doFilter(request,response); } @Override public void destroy() { } }
编写完过滤器类后立马到web.xml注册
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.lian.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.JSON格式(重要)前后端数据交互
这里测试内容:后端传给前端json格式字符串并在前端页面打印出来
为了实现代码复用,先封装json格式的工具类
public class JsonUtils { public static String getjson3(Object object) throws JsonProcessingException { return getjson3(object,"yyyy-MM-dd HH:mm:ss"); } public static String getjson3(Object object, String dateFormat) throws JsonProcessingException { ObjectMapper mapper=new ObjectMapper(); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false); //自定义日期的格式 SimpleDateFormat sdf=new SimpleDateFormat(dateFormat); mapper.setDateFormat(sdf); return mapper.writeValueAsString(object); } }
ORM实体类映射数据库方便测试
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private int age; private String sex; }
测试方法1,将java对象以Json字符串形式在前端页面显示
@RequestMapping(value = "/j1", produces = {"application/json;charset=UTF-8"}) @ResponseBody//它就不会走视图解析器,直接返回字符串 public String json1() throws JsonProcessingException { ObjectMapper mapper=new ObjectMapper(); //创建一个对象 User user=new User("秦将1号",3,"男"); String str=mapper.writeValueAsString(user); return str; }
测试方法2,将多个java对象包装成列表以Json字符串形式在前端页面显示
@RequestMapping(value = "/j2", produces = {"application/json;charset=UTF-8"}) @ResponseBody//不加这个会报404,不加它会走视图解析器,而不会直接返回字符串 public String json2() throws JsonProcessingException { // ObjectMapper mapper=new ObjectMapper(); List<User> users=new ArrayList<User>(); User user1=new User("秦将1号",3,"男"); User user2=new User("秦将2号",3,"男"); User user3=new User("秦将3号",3,"男"); User user4=new User("秦将4号",3,"男"); users.add(user1); users.add(user2); users.add(user3); users.add(user4); return JsonUtils.getjson3(users); }
测试方法3,同测试方法2
@RequestMapping(value = "/j3", produces = {"application/json;charset=UTF-8"}) @ResponseBody//不加这个会报404,它会走视图解析器,而不会直接返回字符串 public String json3() throws JsonProcessingException { Date date=new Date(); return JsonUtils.getjson3(date,"yyyy-MM-dd HH:mm:ss"); }
测试方法4,java对象和json对象之间的转换
@RequestMapping(value = "/j4", produces = {"application/json;charset=UTF-8"}) @ResponseBody//不加这个会报404,它会走视图解析器,而不会直接返回字符串 public String json4() throws JsonProcessingException { // ObjectMapper mapper=new ObjectMapper(); List<User> users=new ArrayList<User>(); User user1=new User("秦将1号",3,"男"); User user2=new User("秦将2号",3,"男"); User user3=new User("秦将3号",3,"男"); User user4=new User("秦将4号",3,"男"); users.add(user1); users.add(user2); users.add(user3); users.add(user4); System.out.println("=====java对象转json字符串====="); String str1= JSON.toJSONString(users); System.out.println(str1); String str2=JSON.toJSONString(user1); System.out.println(str2); System.out.println("=====json字符串转java对象====="); User jp_user1=JSON.parseObject(str2,User.class); System.out.println(jp_user1); System.out.println("=====java对象转json对象====="); JSONObject jsonObject= (JSONObject) JSON.toJSON(user1); System.out.println(jsonObject.getString("name")); System.out.println("=====json对象转java对象====="); User to_java_user=JSON.toJavaObject(jsonObject,User.class); System.out.println(to_java_user); return "Hello"; }
浙公网安备 33010602011771号