(本文展示部分controller层的编码)
做过测试的都知道如下代码
java
@GetMapping("/user")
public User getUser() {
return new User(1, "张三", 18);
}
浏览器访问http://localhost:8080/user时,会出现:
{
"id": 1,
"name": "张三",
"age": 18
}
那么原理为何?有何特点?
- 处理流程
bash
Java 对象
↓
Jackson 序列化
↓
JSON 字符串
↓
返回给浏览器
- getter!!!
问getter是什么的可以看一下java基础了,那么getter的作用是什么?
Jackson 在转换时:不是直接访问字段,而是通过:getter
这个其实很好理解,因为规范编码下实体类中的属性一般是private,所以需要getter作为媒介,如果换成public当然不用getter,但规范如此。
那么对于下述代码呢?
java
@GetMapping("/test")
public String test() {
return "hello";
}
现在你没经过测试那么告诉我浏览器此时显示的是hello还是"hello"。
...(testing)答案是hello
why?-因为String(即普通文本)不会走jackson 会直接写入响应体(即浏览器真正显示的内容)
tip:大家不用纠结这个运行过程是什么,这里是spring自动处理的,另外大家的重点应该在于浏览器接收到了什么而不是处理流程
总结:
| 返回类型 | 浏览器看到什么 | 原因 |
|---|---|---|
| Java 对象 | JSON | Jackson 序列化 |
| String | 文本(不带引号) | 直接输出文本 |
小测试:(欢迎评论区回复)
java
@GetMapping("/test")
public String test() {
return "<h1>你好</h1>";
}
在浏览器端看到是
A. "<h1>你好</h1>"
B.<h1>你好</h1>
C. h1样式的你好