• json和axion结合


    目录

    java中使用JSON对象

    在pom.xml中导入依赖

    使用 public static String toJSONString(Object object)把自定义对象变成JSON对象

     json和axios综合案例

    使用的过滤器

    前端代码 

    响应和请求都是普通字符串 和 请求时普通字符串,响应是json字符串

    响应的数据是json数据

    结果

    json和axios综合案例进阶 

    在web层中,可以创建一个Result类,用来封装发给前端的数据

     Servlet类

     前端代码的书写

    结果


    java中使用JSON对象

    在pom.xml中导入依赖

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>fastjsonartifactId>
    4. <version>1.2.47version>
    5. dependency>

    json对象

    {key:value,key:value...}//key必须是字符串类型 

    使用 public static String toJSONString(Object object)把自定义对象变成JSON对象

    测试  

    1. public class User {
    2. private String username;
    3. private String password;
    4. public User() {
    5. }
    6. public User(String username, String password) {
    7. this.username = username;
    8. this.password = password;
    9. }
    10. public String getUsername() {
    11. return username;
    12. }
    13. public void setUsername(String username) {
    14. this.username = username;
    15. }
    16. public String getPassword() {
    17. return password;
    18. }
    19. public void setPassword(String password) {
    20. this.password = password;
    21. }
    22. }
    1. public class JsonTest {
    2. //将一个对象转换成json对象
    3. @Test
    4. public void test() {
    5. //创建一个User对象
    6. User user = new User();
    7. //赋值
    8. user.setUsername("hhh");
    9. user.setPassword("123");
    10. String jsonString = JSON.toJSONString(user);
    11. System.out.println("json=" + jsonString);
    12. //json={"password":"123","username":"hhh"}
    13. }
    14. //单列集合转换成json对象
    15. @Test
    16. public void test1() {
    17. //创建集合
    18. List list = new ArrayList<>();
    19. Collections.addAll(list, new User("hhh", "123"), new User("aaa", "345"));
    20. String jsonString = JSON.toJSONString(list);
    21. System.out.println("json=" + jsonString);
    22. /*
    23. json=[
    24. {"password":"123","username":"hhh"},
    25. {"password":"345","username":"aaa"}
    26. ]
    27. */
    28. }
    29. //双列集合转换成json对象
    30. @Test
    31. public void test2()
    32. {
    33. //创建集合
    34. Mapmap=new HashMap<>();
    35. map.put("hhh1","aaa");
    36. map.put("hhh2",new User("bbb","1"));
    37. List list = new ArrayList<>();
    38. Collections.addAll(list, new User("hhh", "123"), new User("aaa", "345"));
    39. map.put("hhh3",list);
    40. String jsonString = JSON.toJSONString(map);
    41. System.out.println("json="+jsonString);
    42. /*
    43. json={
    44. "hhh1":"aaa",
    45. "hhh2":{"password":"1","username":"bbb"},
    46. "hhh3":[{"password":"123","username":"hhh"},{"password":"345","username":"aaa"}]
    47. }
    48. */
    49. }
    50. }

     json和axios综合案例

    使用的过滤器

    1. @WebFilter("/*")
    2. public class EncodeFilter implements Filter {
    3. @Override
    4. public void init(FilterConfig filterConfig) throws ServletException {
    5. }
    6. @Override
    7. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    8. HttpServletRequest request = (HttpServletRequest) servletRequest;
    9. HttpServletResponse response = (HttpServletResponse) servletResponse;
    10. //your code..
    11. //解决请求乱码
    12. request.setCharacterEncoding("utf-8");
    13. //解决响应乱码
    14. response.setContentType("text/html;charset=utf-8");
    15. response.addHeader( "Access-Control-Allow-Origin","*");//允许所有来源访同
    16. response.addHeader( "Access-Control-Allow-Method","POST,GET");//允许访问的方式
    17. //放行
    18. filterChain.doFilter(request,response);
    19. }
    20. @Override
    21. public void destroy() {
    22. }
    23. }

    前端代码 

    1. <template>
    2. <div id="app">
    3. <h1>axois和json综合h1>
    4. <input type="button" value="请求和响应都是普通字符串" @click="method1()"> <br>
    5. <input type="button" value="响应数据是json字符串" @click="method2()"> <br>
    6. <input type="button" value="请求数据是json字符串" @click="method3()"> <br>
    7. <hr>
    8. <h3>好友列表h3>
    9. <table width="500px" cellspacing="0px" cellpadding="5px" border="1px" id="myTable">
    10. <tr>
    11. <th>idth>
    12. <th>nameth>
    13. <th>ageth>
    14. tr>
    15. table>
    16. div>
    17. template>
    18. <script>
    19. import axios from 'axios';
    20. export default {
    21. name: 'App',
    22. methods:{
    23. //1.响应和请求都是普通字符串
    24. method1(){
    25. //定义变量保存后端地址
    26. let url="http://localhost:8080/ajaxJsonDemo1Servlet";
    27. //定义参数
    28. let params="username=何以以&password=123";
    29. //发送请求
    30. axios.post(url,params)
    31. .then(res=>{
    32. console.log(res.data);
    33. })
    34. },
    35. //请求时普通字符串,响应改成json字符串
    36. method2(){
    37. //定义变量保存后端地址
    38. let url="http://localhost:8080/ajaxJsonDemo2Servlet";
    39. //定义参数
    40. let params="username=何以以&password=123";
    41. //发送请求
    42. axios.post(url,params)
    43. .then(res=>{
    44. console.log(res.data);
    45. })
    46. },
    47. method3(){
    48. //定义变量保存后端地址
    49. let url="http://localhost:8080/ajaxJsonDemo3Servlet";
    50. //json对象的 " " 每个引号之前都要加 \ 转义字符
    51. let params="{\"username\":\"何以以\",\"password\":\"145\"}";
    52. //发送请求
    53. axios.post(url,params)
    54. .then(res=>{
    55. console.log(res.data);
    56. }
    57. )
    58. }
    59. }
    60. }
    61. script>
    62. <style>
    63. /* #app {
    64. font-family: 'Avenir', Helvetica, Arial, sans-serif;
    65. -webkit-font-smoothing: antialiased;
    66. -moz-osx-font-smoothing: grayscale;
    67. text-align: center;
    68. color: #2c3e50;
    69. margin-top: 60px;
    70. } */
    71. style>

    响应和请求都是普通字符串 和 请求时普通字符串,响应是json字符串

    1. @WebServlet("/ajaxJsonDemo1Servlet")
    2. public class ajaxJsonDemo1Servlet extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    5. //获取请求参数
    6. String username = request.getParameter("username");
    7. String password = request.getParameter("password");
    8. //打印输出
    9. System.out.println(username+"---"+password);
    10. //响应数据给前端
    11. response.addHeader( "Access-Control-Allow-Origin","*");//允许所有来源访同
    12. response.addHeader( "Access-Control-Allow-Method","POST,GET");//允许访问的方式
    13. response.getWriter().print("后端已经成功接收到数据");
    14. }
    15. @Override
    16. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    17. doGet(request, response);
    18. }
    19. }
    1. //请求时普通字符串,响应是json字符串
    2. @WebServlet("/ajaxJsonDemo2Servlet")
    3. public class ajaxJsonDemo2Servlet extends HttpServlet {
    4. @Override
    5. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    6. //请求时普通字符串,响应数据是json对象
    7. //接收请求参数
    8. String username = request.getParameter("username");
    9. String password = request.getParameter("password");
    10. //创建User对象
    11. User user = new User();
    12. //将数据封装到User对象中
    13. user.setUsername(username);
    14. user.setPassword(password);
    15. //将对象变成json对象
    16. String jsonString = JSON.toJSONString(user);
    17. //响应数据给前端
    18. response.addHeader( "Access-Control-Allow-Origin","*");//允许所有来源访同
    19. response.addHeader( "Access-Control-Allow-Method","POST,GET");//允许访问的方式
    20. response.getWriter().print(jsonString);
    21. }
    22. @Override
    23. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    24. doGet(request, response);
    25. }
    26. }

    响应的数据是json数据

     request.getParameter("标识符");只能获取请求参数是普通字符串
            如果是json字符使用:
             1)使用request.getInputStream();//读取关联浏览器的字节输入流
             2)使用request.getReader();//读取关联浏览器的字符输入流
             所以我们可以使用获取流的方法结合JSON的方法一起解析前端提交的json数据
             public static final T pasreObject(InputStream is,Classclazz);
              参数:
                is:关联的浏览器字节输入流
                clazz:封装json请求参数的字节码对象
                注意:要求实体类的属性名必须与json的key一致
                let params="{\"username\":\"何以以\",\"password\":\"145\"}";
                User实体类的属性名必须是username和password 

    1. @WebServlet("/ajaxJsonDemo3Servlet")
    2. public class ajaxJsonDemo3Servlet extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    5. //获取请求参数
    6. //String username = request.getParameter("username");//获取不了,此方法只能获取普通参数的请求
    7. /*
    8. request.getParameter("标识符");只能获取请求参数是普通字符串
    9. 如果是json字符使用:
    10. 1)使用request.getInputStream();//读取关联浏览器的字节输入流
    11. 2)使用request.getReader();//读取关联浏览器的字符输入流
    12. 所以我们可以使用获取流的方法结合JSON的方法一起解析前端提交的json数据
    13. public static final T pasreObject(InputStream is,Classclazz);
    14. 参数:
    15. is:关联的浏览器字节输入流
    16. clazz:封装json请求参数的字节码对象
    17. 注意:要求实体类的属性名必须与json的key一致
    18. let params="{\"username\":\"何以以\",\"password\":\"145\"}";
    19. User实体类的属性名必须是username和password
    20. */
    21. User user = JSON.parseObject(request.getInputStream(), User.class);
    22. System.out.println("user="+user);//user=User{username='何以以', password='145'}
    23. /* response.addHeader( "Access-Control-Allow-Origin","*");//允许所有来源访同
    24. response.addHeader( "Access-Control-Allow-Method","POST,GET");//允许访问的方式*/
    25. String jsonString = JSON.toJSONString(user);
    26. response.getWriter().print(jsonString);
    27. }
    28. @Override
    29. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    30. doGet(request, response);
    31. }
    32. }

    结果

    第二个的结果:

    第三个的结果

    json和axios综合案例进阶 

    在web层中,可以创建一个Result类,用来封装发给前端的数据

    1. public class Result {
    2. private boolean flag;//执行结果,true为执行成功,false为执行失败
    3. private String message;//返回结果信息
    4. private Object valueDate;//返回数据(如果是查询操作就设置,增删不用设置)
    5. public Result(){}
    6. public Result(boolean flag, String message) {//失败,或者增删改
    7. this.flag = flag;
    8. this.message = message;
    9. }
    10. //成功的查询
    11. public Result(boolean flag, String message, Object valueDate) {
    12. this.flag = flag;
    13. this.message = message;
    14. this.valueDate = valueDate;
    15. }
    16. public boolean isFlag() {
    17. return flag;
    18. }
    19. public void setFlag(boolean flag) {
    20. this.flag = flag;
    21. }
    22. public String getMessage() {
    23. return message;
    24. }
    25. public void setMessage(String message) {
    26. this.message = message;
    27. }
    28. public Object getValueDate() {
    29. return valueDate;
    30. }
    31. public void setValueDate(Object valueDate) {
    32. this.valueDate = valueDate;
    33. }
    34. }

     Servlet类

    1. @WebServlet("/ajaxJsonDemo3Servlet")
    2. public class ajaxJsonDemo3Servlet extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    5. //获取请求参数
    6. //String username = request.getParameter("username");//获取不了,此方法只能获取普通参数的请求
    7. /*
    8. request.getParameter("标识符");只能获取请求参数是普通字符串
    9. 如果是json字符使用:
    10. 1)使用request.getInputStream();//读取关联浏览器的字节输入流
    11. 2)使用request.getReader();//读取关联浏览器的字符输入流
    12. 所以我们可以使用获取流的方法结合JSON的方法一起解析前端提交的json数据
    13. public static final T pasreObject(InputStream is,Classclazz);
    14. 参数:
    15. is:关联的浏览器字节输入流
    16. clazz:封装json请求参数的字节码对象
    17. 注意:要求实体类的属性名必须与json的key一致
    18. let params="{\"username\":\"何以以\",\"password\":\"145\"}";
    19. User实体类的属性名必须是username和password
    20. */
    21. User user = JSON.parseObject(request.getInputStream(), User.class);
    22. System.out.println("user="+user);
    23. /* response.addHeader( "Access-Control-Allow-Origin","*");//允许所有来源访同
    24. response.addHeader( "Access-Control-Allow-Method","POST,GET");//允许访问的方式*/
    25. //模拟从数据库查出user信息的好友列表
    26. List list=new ArrayList<>();
    27. Collections.addAll(list,new User("蚂蚁","123"),new User("遗迹","125"));
    28. //创建一个Result类对象
    29. Result result = new Result(true, "查询用户成功", list);
    30. //变成json对象
    31. String jsonString = JSON.toJSONString(result);
    32. //响应数据给前端
    33. response.getWriter().print(jsonString);
    34. }
    35. @Override
    36. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    37. doGet(request, response);
    38. }

    发给前端的数据

     前端代码的书写

    1. <template>
    2. <div id="app">
    3. <h1>axois和json综合h1>
    4. <input type="button" value="请求和响应都是普通字符串" @click="method1()"> <br>
    5. <input type="button" value="响应数据是json字符串" @click="method2()"> <br>
    6. <input type="button" value="请求数据是json字符串" @click="method3()"> <br>
    7. <hr>
    8. <div id="messID">div> <br>
    9. <h3>好友列表h3>
    10. <table width="500px" cellspacing="0px" cellpadding="5px" border="1px" id="myTable">
    11. <tr>
    12. <th>名字th>
    13. <th>密码th>
    14. tr>
    15. table>
    16. div>
    17. template>
    18. <script>
    19. import axios from 'axios';
    20. export default {
    21. name: 'App',
    22. methods:{
    23. //1.响应和请求都是普通字符串
    24. method1(){
    25. //定义变量保存后端地址
    26. let url="http://localhost:8080/ajaxJsonDemo1Servlet";
    27. //定义参数
    28. let params="username=何以以&password=123";
    29. //发送请求
    30. axios.post(url,params)
    31. .then(res=>{
    32. console.log(res.data);
    33. })
    34. },
    35. //请求时普通字符串,响应改成json字符串
    36. method2(){
    37. //定义变量保存后端地址
    38. let url="http://localhost:8080/ajaxJsonDemo2Servlet";
    39. //定义参数
    40. let params="username=何以以&password=123";
    41. //发送请求
    42. axios.post(url,params)
    43. .then(res=>{
    44. console.log(res.data);
    45. //从后端查到的数据{flag: true, mmessage: '查询用户成功', valueDate: Array(2)}
    46. })
    47. },
    48. method3(){
    49. //定义变量保存后端地址
    50. let url="http://localhost:8080/ajaxJsonDemo3Servlet";
    51. //json对象的 " " 每个引号之前都要加 \ 转义字符
    52. let params="{\"username\":\"何以以\",\"password\":\"145\"}";
    53. //发送请求
    54. axios.post(url,params)
    55. .then(res=>{
    56. console.log(res.data);
    57. //从后端查到的数据{flag: true, message: '查询用户成功', valueDate: Array(2)}
    58. /*
    59. valueDate{password: '123', username: '蚂蚁'},{password: '125', username: '遗迹'}
    60. */
    61. let obj=res.data;
    62. if(obj.flag){
    63. //查询成功
    64. document.getElementById("messID").innerHTML=obj.message;
    65. //设置空字符串
    66. let content="";
    67. let arr=obj.valueDate;
    68. for(let a of arr){//a是数组中的每个json对象
    69. content+=`
    70. ${a.username}
    71. ${a.password}
    72. `
    73. }
    74. document.getElementById("myTable").innerHTML+=content;
    75. }
    76. }
    77. )
    78. }
    79. }
    80. }
    81. script>
    82. <style>
    83. /* #app {
    84. font-family: 'Avenir', Helvetica, Arial, sans-serif;
    85. -webkit-font-smoothing: antialiased;
    86. -moz-osx-font-smoothing: grayscale;
    87. text-align: center;
    88. color: #2c3e50;
    89. margin-top: 60px;
    90. } */
    91. style>

    结果

     点击第三个按钮

    由于我们会重复的从前端解析json,和发送json给前端,我们可以把那几个方法封装从工具类

    1. public class BaseController {
    2. //静态方法解析前端提交的json数据 Class clazz=User.class
    3. //定义泛型
    4. //T parseToObject,Class clazz都是使用泛型
    5. public static T parseToObject(HttpServletRequest request,Class clazz)throws Exception{
    6. T obj= JSON.parseObject(request.getInputStream(),clazz);
    7. return obj;
    8. }
    9. //静态方法将后端的json数据响应到前端
    10. public static void responseJsonToBrowser(HttpServletResponse response,Object obj)throws Exception{
    11. //将result对象变成json
    12. String jsonString = JSON.toJSONString(obj);
    13. //响应数据给前端
    14. response.getWriter().print(jsonString);
    15. }
    16. }

     

  • 相关阅读:
    QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
    DatenLord前沿技术分享 No.38
    【源码】C++坦克大战源码
    一文入门 Spring Cloud Tencent
    机器学习助力基于优化理论的TDOA无源定位
    【牛客网刷题】(第二弹)中等难度题型来了.这些题你都会做吗?
    Linux下C++开发笔记--编译静态链接库和动态链接库
    二叉树题目:最大二叉树
    Android 内存泄漏
    Dock搭建FTP文件服务器
  • 原文地址:https://blog.csdn.net/luosuss/article/details/139397609