一、Spring MVC 框架中的 JSON 对象处理方法
在现代 Web 应用中,JSON 格式的数据交换变得越来越普遍。Spring MVC 提供了多种方式来处理 JSON 对象。
- 使用 Jackson 库
- Spring MVC 可以很方便地与 Jackson 库集成。通过在项目中添加相关依赖,我们可以自动将 Java 对象序列化为 JSON 格式,以及将 JSON 数据反序列化为 Java 对象。
- 例如,我们可以使用
@ResponseBody
注解在控制器方法上,当方法返回一个 Java 对象时,Spring MVC 会自动将其转换为 JSON 格式并写入 HTTP 响应体中。
@RestController
public class UserController {
@GetMapping("/user")
public @ResponseBody User getUser() {
User user = new User();
user.setName("John");
user.setAge(30);
return user;
}
}
在这个例子中,当访问/user
路径时,Spring MVC 会将User
对象转换为 JSON 格式,如{"name":"John","age":30}
。
- 自定义 JSON 序列化和反序列化
- 有时候我们可能需要对 JSON 的序列化和反序列化过程进行更精细的控制。Jackson 提供了多种方式来实现自定义。
- 我们可以通过实现
JsonSerializer
和JsonDeserializer
接口来定制特定类型的序列化和反序列化逻辑。
public class CustomDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
jsonGenerator.writeString(sdf.format(date));
}
}
这里我们自定义了一个日期的序列化器,将Date
对象格式化为特定的字符串格式。
二、Spring MVC 框架中的数据转换和格式化功能
- 数据类型转换
- Spring MVC 提供了强大的数据类型转换机制。它可以自动将 HTTP 请求参数转换为控制器方法参数所需的类型。
- 例如,当一个控制器方法接收一个整数类型的参数时,Spring MVC 会尝试将请求中的字符串参数转换为整数。如果转换失败,会抛出相应的异常。
@GetMapping("/add")
public String add(@RequestParam int num1, @RequestParam int num2) {
int sum = num1 + num2;
return "The sum is: " + sum;
}
当用户在请求中输入两个数字作为参数时,Spring MVC 会自动将它们转换为整数。
- 数据格式化
- 对于日期、数字等类型的数据,我们可以使用 Spring 的格式化功能来进行统一的格式处理。
- 通过配置
Formatter
接口的实现类,我们可以定义如何将字符串格式化为特定类型的数据,以及如何将数据格式化为字符串。
public class CustomDateFormatter implements Formatter<Date> {
@Override
public Date parse(String text, Locale locale) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(text);
}
@Override
public String print(Date date, Locale locale) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
}
}
这个自定义的日期格式化器可以在应用中对日期进行统一的格式处理。
三、搭建 SSM 框架
- Spring 配置
- 首先,我们需要配置 Spring 的核心容器。这包括定义 Bean、配置事务管理等。
- 在
applicationContext.xml
文件中,我们可以定义数据源、事务管理器等 Bean。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb" />
<property name="user" value="root" />
<property name="password" value="password" />
</bean>
这里配置了一个 C3P0 数据源连接到 MySQL 数据库。
- SpringMVC 配置
- 对于 SpringMVC,我们需要配置 DispatcherServlet 来处理请求。
- 在
web.xml
文件中,我们进行如下配置:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
同时,在springmvc-config.xml
文件中,我们配置视图解析器等内容。
- MyBatis 配置
- MyBatis 的配置主要包括定义数据库映射文件和配置 SQLSessionFactory。
- 在
mybatis-config.xml
文件中,我们可以配置数据库连接信息、映射文件路径等。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml" />
</mappers>
</configuration>
四、基于 SSM 框架的代码开发
- Service 层开发
- 在 Service 层,我们可以编写业务逻辑代码。例如,对于用户管理功能,我们可以有一个
UserService
接口和其实现类。
- 在 Service 层,我们可以编写业务逻辑代码。例如,对于用户管理功能,我们可以有一个
public interface UserService {
List<User> getAllUsers();
User getUserById(int id);
void addUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getAllUsers() {
return userMapper.getAllUsers();
}
// 其他方法实现类似
}
- Controller 层开发
- 在 Controller 层,我们处理 HTTP 请求并调用 Service 层的方法。
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public String getAllUsers(Model model) {
List<User> users = userService.getAllUsers();
model.addAttribute("users", users);
return "usersList";
}
// 其他请求处理方法类似
}