【WEEK3】 【DAY3】JSON Interaction Handling Part Two【English Version】

2024.3.13 Wednesday

Continuing from 【WEEK3】 【DAY2】JSON Interaction Handling Part One 【English Version】

Contents

  • 6.4 Code Optimization
    • 6.4.1 Unified Solution for Garbled Text
    • 6.4.2 Unified Solution for Returning JSON Strings
  • 6.5 Testing Collection Output
    • 6.5.1 Add a new method json2 in UserController.java
    • 6.5.2 Run
  • 6.6 Outputting Time Objects
    • 6.6.1 Add a new method json3 in UserController.java
    • 6.6.2 Run
    • 6.6.3 Changing the Method of Outputting Time
      • 6.6.3.1 Java Solution
      • 6.6.3.2 ObjectMapper Formatted Output

6.4 Code Optimization

6.4.1 Unified Solution for Garbled Text

  1. The previous method is cumbersome as it requires adding code for each request in the project. We can specify a uniform configuration through Spring, which eliminates the need to handle garbled text each time. A StringHttpMessageConverter conversion configuration can be added in the springMVC configuration file.
  2. Modify 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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Automatically scan the specified package, all annotated classes below are managed by the IOC container -->
    <context:component-scan base-package="P14.controller"/>

    <!-- Configuration to solve JSON garbled text issue -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- View Resolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- Prefix -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- Suffix -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

  1. Now revert UserController.java to the version without the garbled text solution (comment out the following line) to check the effectiveness of this method.
    //Fix garbled text issue
//    @RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")
  1. Run to check that the garbled text issue has been resolved.
    http://localhost:8080/springmvc_05_json_war_exploded/j1
    Insert image description here

6.4.2 Unified Solution for Returning JSON Strings

  1. Use @RestController directly on the class so that all methods return JSON strings without adding @ResponseBody for each method. @RestController is commonly used in front-end and back-end separated development, which is very convenient.
package P14.controller;

import P14.project.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

//@Controller //Through view resolver
@RestController //Not through view resolver, the following methods will only return JSON strings (The scope is very broad, so there is no need to write @ResponseBody on line 18)
public class UserController {

    //Fix garbled text issue
//    @RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")
    @RequestMapping("/j1")
//    @ResponseBody   //Will not go through the view resolver, will directly return a string
    public String json1() throws JsonProcessingException {
        //Use ObjectMapper from imported jackson-databind package
        ObjectMapper mapper = new ObjectMapper();

        //Create an object
        User user = new User("Zhang San",11,"female");

        //Convert an object to a string
        String str = mapper.writeValueAsString(user);

        //Due to @ResponseBody annotation, this will convert str to JSON format and return it; very convenient
        return str;
    }
}

  1. The run results are the same as above, not much to elaborate.

6.5 Testing Collection Output

6.5.1 Add a new method json2 in UserController.java

@RequestMapping("/j2_set")
    public String json2() throws JsonProcessingException {
        //Use ObjectMapper from imported jackson-databind package
        ObjectMapper mapper = new ObjectMapper();

        //Create a collection
        List<User> userList = new ArrayList<>();
        User user1 = new User("Zhang San",11,"female");
        User user2 = new User("Li Si",11,"male");
        User user3 = new User("Wang Wu",11,"female");
        //Add users to collection
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);

        //Convert a collection to a string
        String str = mapper.writeValueAsString(userList);

        //Return multiple objects
        return str; //Equivalent to returning new ObjectMapper().writeValueAsString(userList)
    }

6.5.2 Run

http://localhost:8080/springmvc_05_json_war_exploded/j2_set
Insert image description here

6.6 Outputting Time Objects

6.6.1 Add a new method json3 in UserController.java

@RequestMapping("/j3_time")
    public String json3() throws JsonProcessingException {
        //Use ObjectMapper from imported jackson-databind package
        ObjectMapper mapper = new ObjectMapper();
        //Make sure to import from java.util package
        Date date = new Date();
        //ObjectMapper default timestamp format after parsing time
        return  mapper.writeValueAsString(date);
    }

6.6.2 Run

http://localhost:8080/springmvc_05_json_war_exploded/j3_time
Insert image description here
The string of numbers obtained from the run is a timestamp, which is Jackson’s default time conversion form. Timestamp refers to the number of seconds passed since January 1, 1970 (midnight UTC/GMT), not considering leap seconds. Reference link: https://tool.lu/timestamp/

6.6.3 Changing the Method of Outputting Time

Add a method on top of the above to have the output time appear in a custom way.

6.6.3.1 Java Solution

  1. Create json4
@RequestMapping("/j4_time")
    public String json4() throws JsonProcessingException {
        //Use ObjectMapper from imported jackson-databind package
        ObjectMapper mapper = new ObjectMapper();

        //Make sure to import from java.util package
        Date date = new Date();

        //Use custom date format
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //ObjectMapper default timestamp format after parsing time
        return  mapper.writeValueAsString(sdf.format(date));
    }
  1. Run
    http://localhost:8080/springmvc_05_json_war_exploded/j4_time
    Insert image description here

6.6.3.2 ObjectMapper Formatted Output

  1. Create json5
@RequestMapping("/j5_time")
    public String json5() throws JsonProcessingException {
        //Use ObjectMapper from imported jackson-databind package
        ObjectMapper mapper = new ObjectMapper();
        //Format output with ObjectMapper
        //Turn off timestamp usage
        mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
        //Use custom date format
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //Set a new custom timestamp usage
        mapper.setDateFormat(sdf);

        //Make sure to import from java.util package
        Date date = new Date();

        //ObjectMapper default timestamp format after parsing time
        return  mapper.writeValueAsString(date);
    }
  1. Run
    http://localhost:8080/springmvc_05_json_war_exploded//j5_time
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/465658.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

铸铁钳工工作台是一种专门使用工具,具有哪些特点和功能

铸铁钳工作台是一种专门用于加工和修理铸铁制品的工作台。它通常由坚固的钢铁结构构成&#xff0c;表面通常涂有耐腐蚀的涂层&#xff0c;以提高其使用寿命和耐久性。 铸铁钳工作台通常具有以下主要特点和功能&#xff1a; 高强度和稳定性&#xff1a;由于铸铁是一种坚固耐用的…

ConcurrentMap的相关特点和使用

概述 ConcurrentMap是Java中的一个接口&#xff0c;主要扩展了Map接口&#xff0c;用于在多线程环境中提供线程安全的Map实现&#xff0c;是Java.util.concurrent包中的一部分&#xff0c;提供了一些原子操作&#xff0c;这些操作不需要使用synchronized关键字&#xff0c;从而…

SAP前台处理:销售业务集成<VA03/VL03N/VLPOD/VF03) 01/02

一、背景&#xff1a; 从销售订单创建VA01>发货过账VL01N >POD确认>VF01开票 这个流程涉及的凭证流及各个节点如何查询上游下游凭证&#xff1b; 二、凭证流&#xff1a; 从销售订单查看销售凭证流 VA03 双击交货单&#xff1a;带出交货单对应行项目及分批次项目…

一周学会Django5 Python Web开发-Jinja3模版引擎-模板语法

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Jest:JavaScript的单元测试利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Spring炼气之路(炼气二层)

一、bean的配置 1.1 bean的基础配置 id&#xff1a; bean的id&#xff0c;使用容器可以通过id值获取对应的bean&#xff0c;在一个容器中id值唯一 class&#xff1a; bean的类型&#xff0c;即配置的bean的全路径类名 <bean id"bookDao" class "com.zhang…

Docker 安装 Skywalking以及UI界面

关于Skywalking 在现代分布式系统架构中&#xff0c;应用性能监控&#xff08;Application Performance Monitoring, APM&#xff09;扮演着至关重要的角色。本文将聚焦于一款备受瞩目的开源APM工具——Apache Skywalking&#xff0c;通过对其功能特性和工作原理的详细介绍&am…

ISTJ型人格的心理问题

什么是ISTJ型人格 ISTJ型人格&#xff0c;来源于mbti职业性格测试&#xff0c;代表的是内向&#xff0c;实感&#xff0c;理智&#xff0c;独立&#xff0c;ISTJ型人格则是一种以认真&#xff0c;安静&#xff0c;负责任为显著特征的人格&#xff0c;具有这种人格的人&#xf…

leetcode 3080

leetcode 3080 题目 例子 思路 创建数组&#xff0c;记录nums 的值 对应的id, 按照大小排序。 代码实现 class Solution { public:vector<long long> unmarkedSumArray(vector<int>& nums, vector<vector<int>>& queries) {vector<long…

【回溯专题】【蓝桥杯备考训练】:n-皇后问题、木棒、飞机降落【未完待续】

目录 1、n-皇后问题&#xff08;回溯模板&#xff09; 2、木棒&#xff08;《算法竞赛进阶指南》、UVA307&#xff09; 3、飞机降落&#xff08;第十四届蓝桥杯省赛C B组&#xff09; 1、n-皇后问题&#xff08;回溯模板&#xff09; n皇后问题是指将 n 个皇后放在 nn 的国…

C++学习基础版(一)

目录 一、C入门 1、C和C的区别 2、解读C程序 3、命名空间 4、输入输出 &#xff08;1&#xff09;cout输出流 &#xff08;2&#xff09;endl操纵符 &#xff08;3&#xff09;cin输入流 二、C表达式和控制语句 1、数据机构 特别&#xff1a;布尔类型bool 2、算数运…

基于springboot的医院后台管理系统

采用技术 基于springboot的医院后台管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 患者管理 公告信息管理 公告类型管理 项目背景 互联网概…

【对顶队列】【中位数贪心】【前缀和】100227. 拾起 K 个 1 需要的最少行动次数

本文涉及知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 对顶队列&#xff08;栈&#xff09; 分类讨论 LeetCode100227. 拾起 K 个 1 需要的最少行动次数 给你一个下标从 0 开始的二进制数组 nums&#xff0c;其长度为 n &#x…

软件功能测试内容有哪些?湖南长沙软件测评公司分享

软件功能测试主要是验证软件应用程序的功能&#xff0c;且不管功能是否根据需求规范运行。是通过给出适当的输入值&#xff0c;确定输出并使用预期输出验证实际输出来测试每个功能。也可以看作“黑盒测试”&#xff0c;因为功能测试不用考虑程序内部结构和内部特性&#xff0c;…

#QT(事件--快捷键保存文件)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;QEvent,QMouseEvent,QKeyEvent。 在上一个文本编辑器的基础上实现快捷键"ctrls"保存文件。 3.记录 &#xff08;1&#xff09;查看QEVENT的有效事件 &#xff08;2&#xff09; 所有时间均继承于QEvent&#xff0c;任…

数学建模-邢台学院

文章目录 1、随机抽取的号码在总体的排序2、两端间隔对称模型 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0​,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1​,x2​,……

3_springboot_shiro_jwt_多端认证鉴权_Redis缓存管理器

1. 什么是Shiro缓存管理器 上一章节分析完了Realm是怎么运作的&#xff0c;自定义的Realm该如何写&#xff0c;需要注意什么。本章来关注Realm中的一个话题&#xff0c;缓存。再看看 AuthorizingRealm 类继承关系 其中抽象类 CachingRealm &#xff0c;表示这个Realm是带缓存…

使用Arthas

Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6&#xff0c; 采用命令行交互模式&#xff0c;可以方便的定位和诊断 线上程序运行问题。Arthas 官方文档十分详细&#xff0c;详见&#xff1a;https://alibaba.github.io/arthas 1、下载 代码托管地址之一…

不想当智能手表游戏掌机MP4的开发板不是好86盒

有道是&#xff0c;生活不易&#xff0c;多才多艺。 只是没想到有一天连开发板也能适用这句话。 你以为它只是一个平平无奇的智能家居86盒。 但它必要时它也可以化身智能手表。 或者是一个能随身携带的MP4。 甚至可以是一个能玩植物大战僵尸的触屏游戏掌机&#xff01; 项目简…

【CSP试题回顾】202212-3-JPEG 解码

CSP-202212-3-JPEG 解码 关键点&#xff1a;Z字扫描 在JPEG压缩中&#xff0c;Z字形扫描是一种将8x8块的数据按照Z字形&#xff08;或之字形&#xff09;顺序重新排列的过程。这样做的目的是为了将相似的数据&#xff08;尤其是零值&#xff09;放置在一起&#xff0c;从而提高…