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() {
    }
}
View Code

编写完过滤器类后立马到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>
View Code

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);
    }
}
View Code

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;
}
View Code

测试方法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;
    }
View Code

测试方法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);
    }
View Code

测试方法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");
    }
View Code

测试方法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";
    }
View Code

 


 

posted on 2023-04-24 20:40  醒醒起来  阅读(158)  评论(0)    收藏  举报