简述一个关于null的理解误区:null不等于null--【叶子】

本文通过实例详细解析了SQL中NULL值的比较规则,包括为何NULL不等于NULL以及如何正确地进行NULL值的判断与赋值。并强调了在SQL中处理NULL时应当使用IS关键字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前记:总有人问我null为什么不等于null

首先写一个简单的例子

declare @table table(id int ,col varchar(20))

insert into @table

select 1,'bag' union all

select 2,null union all

select 3,'ball'

select * from @table where col<>null

select * from @table where col =null

/*

两句话的结果一样:

id col

----------- --------------------

都是没有数据

*/

为什么呢?

因为null<>null

然后我们用下面的语句来测试一下

if(null=null)

select 'null=null' as result_a

else

select 'null<>null' as result_a

if(null is null)

select 'null is null' as result_b

else

select 'null is not null' as result_b

/*

result_a

----------

null<>null

result_b

------------

null is null

*/

结果说明了null不等于null,但nullnull

然后我们在赋值的时候,就不一样了

举个例子说明一下:

--测试

declare @i int

set @i=3;

set @i=null;

select @i as '@i';

/*结果

@i

-----------

NULL

*/

对于null来说,其实就是一句话:

判断的时候用"is",赋值的时候用"="

@【叶子】http://blog.youkuaiyun.com/maco_wang 原创作品,转贴请注明作者和出处,留此信息。

<think>嗯,用户现在问的是如何在SpringMVC中返回JSON数据。之前他们问过常用的五个注解,其中提到了@RestController,可能现在想更深入一点了解具体怎么操作。 首先,我需要确定用户的基础。他们可能已经知道一些SpringMVC的基本概念,比如控制器和注解,但可能对如何配置返回JSON太清楚。用户可能是刚开始学习SpringMVC,或者在开发中遇到了需要返回JSON数据的需求,比如做前后端分离的项目。 接下来,我需要回忆SpringMVC中处理JSON的方式。通常有两种方法:使用@RestController注解或者@Controller配合@ResponseBody。记得@RestController其实就是@Controller和@ResponseBody的组合,所以这两种方式本质上是一样的,只是前者更简洁。 然后要考虑依赖的问题。SpringMVC默认可能支持直接返回JSON,需要添加像Jackson或者Gson这样的库。用户可能在配置时漏掉了这些依赖,导致无法正确返回JSON。所以在回答中应该提到需要添加相关的依赖,比如Jackson的Databind。 另外,可能需要解释一下如何配置消息转换器。虽然现在Spring Boot自动配置了这些,但如果是传统的Spring MVC项目,可能需要手动配置MappingJackson2HttpMessageConverter。过用户可能使用的是Spring Boot,所以可能需要手动配置,但为了全面性,还是应该简要提到。 示例代码也很重要,用户可能需要看到具体的用法。比如用@RestController标注类,然后在方法上使用@RequestMapping或者@GetMapping,并返回一个对象,这样会自动转换成JSON。同时,可以提到其他注解如@RequestBody和@PathVariable在处理JSON数据时的应用,但用户的问题主要是返回,所以可能需要深入这些,过稍微提一下可以增加帮助性。 还要注意用户可能的误区,比如忘记添加依赖导致返回的是JSON而是其他类型,或者没有正确使用注解导致视图解析器尝试寻找视图页面。这时候需要强调@ResponseBody的作用,或者直接使用@RestController来避免这个问题。 总结一下,回答的结构应该是:先说明两种主要方法,然后提到必要的依赖,给出代码示例,最后可能补充一些相关注解和配置要点。同时,提醒用户注意依赖和注解的正确使用,避免常见错误。</think>在 SpringMVC 中返回 JSON 数据非常便捷,主要通过以下两种核心方式实现: --- ### **方法 1:使用 `@RestController` 注解** `@RestController` = `@Controller` + `@ResponseBody`,直接标记类为 REST 控制器,**方法返回值自动转为 JSON**。 **示例代码**: ```java @RestController public class UserController { @GetMapping("/user") public User getUser() { // 返回 User 对象,SpringMVC 自动转为 JSON return new User("Alice", 25); } } ``` --- ### **方法 2:使用 `@Controller` + `@ResponseBody` 注解** 如果使用传统 `@Controller`,需在方法上添加 `@ResponseBody` 注解,强制返回数据而非视图。 **示例代码**: ```java @Controller public class UserController { @ResponseBody @GetMapping("/user") public User getUser() { return new User("Bob", 30); } } ``` --- ### **关键依赖配置** SpringMVC 默认使用 **Jackson** 库处理 JSON,需确保项目中包含以下依赖(以 Maven 为例): ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.3</version> </dependency> ``` --- ### **其他相关注解** 1. **`@RequestBody`** 将 HTTP 请求体中的 JSON 数据反序列化为 Java 对象。 **示例**: ```java @PostMapping("/user") public void createUser(@RequestBody User user) { // 接收前端传来的 JSON 并转为 User 对象 } ``` 2. **`@JsonInclude`** 控制 JSON 序列化时包含/排除特定字段(如忽略 `null` 值)。 **示例**: ```java @JsonInclude(JsonInclude.Include.NON_NULL) public class User { private String name; private Integer age; // getter/setter... } ``` --- ### **常见问题排查** 1. **返回非 JSON 格式** - 确保添加了 Jackson/Gson 依赖。 - 检查是否遗漏 `@ResponseBody` 或 `@RestController`。 2. **日期格式处理** 在字段上使用 `@JsonFormat` 指定日期格式: ```java @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; ``` --- ### **总结** | 方式 | 适用场景 | 核心注解 | |---------------------|--------------------------|----------------------------| | `@RestController` | 纯 API 接口(无视图渲染) | 类级别注解 | | `@Controller`+`@ResponseBody` | 混合使用(部分方法需返回视图) | 方法级别注解 | 掌握这些方法后,即可轻松实现前后端分离的 JSON 数据交互! 🚀
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值