第 12 章 Spring MVC 扩展和 SSM 框架整合

Spring MVC 框架处理JSON数据

SON格式数据在现阶段的Web项目开发中扮演着非常重要的角色。在前端页面和后台交互的过程中,需要一种格式清晰、高效且两端都可以轻松使用的数据格式做交互的媒介,JSON正可以满足这一需求。

 JSON数据的传递处理

在Java中处理JSON数据的传递通常涉及到序列化和反序列化操作。序列化是将Java对象转换为JSON格式的字符串,以便可以将其存储或通过网络传输;反序列化则是将JSON格式的字符串转换回Java对象。在Java中,有很多库可以帮助我们完成这些操作,如Jackson、Gson等。

添加Jackson依赖

<dependency>  
    <groupId>com.fasterxml.jackson.core</groupId>  
    <artifactId>jackson-databind</artifactId>  
    <version>2.13.0</version>  
</dependency>

创建一个Java类

public class User {  
    private String name;  
    private int age;  
  
    public User(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
    @Override  
    public String toString() {  
        return "User{" +  
                "name='" + name + '\'' +  
                ", age=" + age +  
                '}';  
    }  
}

序列化Java对象为JSON字符串

import com.fasterxml.jackson.databind.ObjectMapper;  
  
public class JsonSerializerExample {  
    public static void main(String[] args) {  
        try {  
            User user = new User("John Doe", 30);  
  
            ObjectMapper objectMapper = new ObjectMapper();  
            String jsonString = objectMapper.writeValueAsString(user);  
  
            System.out.println(jsonString);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

反序列化JSON字符串为Java对象

import com.fasterxml.jackson.databind.ObjectMapper;  
  
public class JsonDeserializerExample {  
    public static void main(String[] args) {  
        try {  
            String jsonString = "{\"name\":\"Jane Doe\",\"age\":28}";  
  
            ObjectMapper objectMapper = new ObjectMapper();  
            User user = objectMapper.readValue(jsonString, User.class);  
  
            System.out.println(user);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

JSON数据传递过程中的中文乱码和日期问题

在处理JSON数据传递时,中文乱码和日期格式问题是很常见的。这些问题通常发生在数据被序列化为JSON字符串,或者从JSON字符串反序列化为Java对象的过程中。以下是如何在Java中处理这些问题的示例,这里仍然使用Jackson库。

  1. 中文乱码问题:中文乱码问题通常是因为字符集不匹配导致的。在Java中,确保你的源数据和目标环境都使用UTF-8或其他支持中文的字符集。Jackson库默认使用UTF-8编码,所以通常不需要额外配置。
  2. 日期格式问题:日期格式问题通常是因为JSON字符串中的日期格式与Java对象中的日期类型不匹配。Jackson提供了多种方式来处理这个问题,包括自定义序列化器和反序列化器,以及使用@JsonFormat注解。

多视图解析器

在Java Web开发中,特别是使用Spring MVC框架时,多视图解析器允许你根据请求的不同类型或条件来解析不同的视图。例如,你可能想要对于JSON请求使用JSON视图解析器,而对于HTML请求使用JSP或Thymeleaf等模板引擎。下面是一个使用Spring MVC配置多视图解析器的简单示例。这个示例将包括两个视图解析器:一个用于JSP文件,另一个假设是一个用于某种非HTML视图的自定义视图解析器。但这里为了演示目的,我将展示如何配置两个视图解析器。首先,你需要在Spring配置文件中配置视图解析器。

Spring MVC 框架中的数据格式转换

在Spring MVC框架中,数据格式转换是一个常见且重要的功能,它允许你自动地在请求参数、模型属性和响应体之间转换数据格式。Spring MVC通过一系列机制来实现这一功能,包括但不限于类型转换、格式化、编辑器、以及@RequestBody和@ResponseBody注解的使用。

  • 使用@RequestBody和@ResponseBody进行JSON转换
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestBody;  
import org.springframework.web.bind.annotation.ResponseBody;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
public class UserController {  
  
    @PostMapping("/user")  
    public @ResponseBody User createUser(@RequestBody User user) {  
        return user; 
    }  
}  
 
public class User {  
    private String name;  
    private int age;  
    // getters and setters  
}
  •   自定义类型转换器
import org.springframework.core.convert.converter.Converter;  
import org.springframework.stereotype.Component;  
  
@Component  
public class StringToUserConverter implements Converter<String, User> {  
  
    @Override  
    public User convert(String source) { 
        return new User();
    }  
}
  • 使用Formatter进行字段格式化
import org.springframework.format.Formatter;  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.Locale;  
  
public class CustomDateFormatter implements Formatter<Date> {  
  
    private final String dateFormat;  
  
    public CustomDateFormatter(String dateFormat) {  
        this.dateFormat = dateFormat;  
    }  
  
    @Override  
    public String print(Date object, Locale locale) {  
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, locale);  
        return sdf.format(object);  
    }  
  
    @Override  
    public Date parse(String text, Locale locale) throws ParseException {  
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, locale);  
        return sdf.parse(text);  
    }  
}

数据转换流程概述:

  1. 请求接收: 客户端(如浏览器或另一个服务)发送HTTP请求到服务器。

  2. 请求分发: Spring MVC的DispatcherServlet接收请求,并根据请求URL和配置的映射找到对应的Controller和HandlerMethod。

  3. 参数解析: DispatcherServlet使用HandlerMethodArgumentResolver接口的实现来解析请求中的参数。这包括从请求体(@RequestBody)、路径变量、查询参数等中解析数据。

  4. 数据转换:类型转换器(: 用于在简单类型之间转换,如String到Integer。
    格式化器: 用于特定类型的格式化,如日期或货币,考虑语言环境。
    HTTP消息转换器: 用于在请求体和响应体中读写数据,如JSON、XML等。

  5. 方法调用: 解析并转换后的参数被传递给Controller中的方法。

  6. 果处理: Controller方法执行后,返回的结果(可能是视图名、模型数据或响应体)被处理。

  7. 响应发送: 处理后的结果通过DispatcherServlet和配置的视图解析器(如果需要的话)发送给客户端。

SSM框架搭建

  1. 项目结构设置
  2. 依赖引入
  3. 配置文件编写
  4.  Java代码编写

具体技术:

前端框架:采用JSP为页面载体,使用jQuery框架及HTML5、CSS3实现页面的展示和交互。

Wed框架:采用Spring MVC框架进行Wed请求的接收与处理。

Spring Core: 基于loC和AOP的处理方式统一管理所有的JavaBean。

ORM:采用MyBatis框架,实现数据的持久化操作。

数据存储:采用MySQL数据库进行数据存储,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值