本地怎样上传自己做的网站,如何设计大型电商网站建设,房产网站有哪些,网站模板预览与编辑器前言 在实际开发中#xff0c;我们在前后端传送数据通常使用Json格式#xff0c;而在Spring MVC中返回Json格式的方式有多种#xff0c;接下来我将介绍其中一些。 准备工作 为了演示Json格式的数据#xff0c;我们准备一个实体类#xff0c;例如User#xff0c;这些可以测…前言 在实际开发中我们在前后端传送数据通常使用Json格式而在Spring MVC中返回Json格式的方式有多种接下来我将介绍其中一些。 准备工作 为了演示Json格式的数据我们准备一个实体类例如User这些可以测试java中最常见的类型list集合如何转换成Json格式数据。 User
public class User implements Serializable {private int user_id;private String user_name;private String password;public User(){}public User(int user_id, String user_name, String password) {this.user_id user_id;this.user_name user_name;this.password password;}public int getUser_id() {return user_id;}public void setUser_id(int user_id) {this.user_id user_id;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name user_name;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}
}注意SpringMVC设置返回值为Json的方式多种多样我列举出来的只是我了解的返回方式 方式1设置返回值为ModelAndView RequestMapping(/showJson1)public ModelAndView showJsonInfo(){ModelAndView mv new ModelAndView();List listnew ArrayList();User user1 new User(1,小王,111);User user2 new User(2,小明,222);User user3 new User(3,小美,333);list.add(user1);list.add(user2);list.add(user3);mv.addObject(list,list);mv.setView(new MappingJackson2JsonView());return mv;} 当我们使用ModelAndView作为返回值时可以使用setView方法将 new MappingJackson2JsonView() 作为实参传入此时直接返回ModelAndView即可返回Json格式数据。 效果演示 方式2使用ResponseBody注解 RequestMapping(/showJson2)ResponseBodypublic User showJsonInfo2(){User user3 new User(3,小美,333);return user3;} 此时返回值可以是对象类型例如User也可以是集合类型例如ListUser只要加上注解返回值都会转换成Json 效果演示 方式3使用RestController注解 在类上添加RestController注解可以将该类下所有的控制器方法的返回值都转换成Json格式 RestController
public class TestController2 {RequestMapping(test2)public User getUserJson(){User user new User(1,第一名,123);return user;}
} 查看源码可知RestController注解中包含了ResponseBody如下 效果演示 注意事项 ResponseBody既可以作为方法注解也可以作为类注解 从Spring 4.0开始ResponseBody注解也可以被添加到类级别上。因此在这里RestController等价于ControllerResponseBody 方法4使用ResponseEntity ResponseEntity提供了一种更灵活的方式来构建HTTP响应包括状态码、头部信息和响应体。你可以将JSON对象作为响应体返回。 Controller
public class TestController3 {RequestMapping(/testEntity)public ResponseEntityUsergetJson(){User user new User(2,第二名也不错,111);return ResponseEntity.ok(user);}
}将方法的返回值设置为 ResponseEntity要转换成Json的类型这个类型可以是对象也可以是集合。return 返回ResponseEntity.ok(数据); 调用ResponseEntity中的静态方法ok将数据转换成Json格式并返回 效果演示 Controller
public class TestController3 {RequestMapping(/testEntity)public ResponseEntityListUser getJson(){User user new User(2,第二名也不错,111);ListUser listnew ArrayList();list.add(user);return ResponseEntity.ok(list);}
}
效果演示 方法5手动序列化为JSON字符串 注意事项如果使用的是jetty服务器插件需要保证服务器版本为 才能正常启动成功 第一步导入ObjectMapper依赖 !--需要导入com.fasterxml.jackson.databind.ObjectMapper--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.13.0/version !-- 确保使用最新的稳定版本 --/dependency
第二步测试
Controller
public class TestController4 {private ObjectMapper objectMappernew ObjectMapper();RequestMapping(/JsonSerializable)public String getSerializable() throws JsonProcessingException {User user new User(3,第三名,333);String strobjectMapper.writeValueAsString(user);System.out.println(str);return str;}
}
效果演示 可以看到手动序列化的方式将我们的数据直接转换成了Json格式的字符串数据,返回前端时被视图解析器解析认为字符串时一个视图名所以显示出错。 解决方案 加上ResponseBody注解 此时出现中文乱码 问题分析按f12发现浏览器的响应字符编码为iso-8859-1我们后台设置为utf-8 解决思路设置编码集一致 总结 对于大多数用例来说使用RestController或ResponseBody注解是最简单和最直接的方法。如果你需要更细粒度的控制可以考虑使用ResponseEntity或手动序列化。在全局范围内修改响应体时可以使用ResponseBodyAdvice接口。无论选择哪种方法都应该确保你的项目中包含了适当的JSON处理库如Jackson。