返回前端数据
当我们在处理前端请求时,我们不想返回一个视图,也不想返回一个静态资源,而是想要返回数据,这时候该怎么做呢?实际上这种情况会更加常见,因为在前后端分离的时代,往往不会将页面和静态资源放在后端项目中,后端只负责数据的处理
@ResponseBody
我们只需要在Controller类上添加一个@ResponseBody
注解,既可以使类中所有的方法返回字符串数据,而不走视图映射
@Controller
@ResponseBody
public class MyController {
@RequestMapping("/test")
public String test(){
return "SUCCESS";
}
}
测试结果如下
Spring MVC返回了一个"SUCCESS"字符串,而不是返回一个命名为"SUCCESS"的页面
@ResponseBody
不仅可以添加在Controller类上,也可以添加在方法上,这样添加了该注解的方法会返回字符串数据,而没有添加该的方法会返回视图
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/test1")
public String test1(){
return "SUCCESS";//返回字符串
}
@RequestMapping("/test2")
public String test2(){
return "/test.html";//返回视图
}
}
@RestController
还有一个注解@RestController
也可以帮我们实现同样的功能,这个注解更加常用,打开这个注解可以发现这其实是@Controller
和@ResponseBody
的组合注解
使用的时候直接在Controller类上添加即可,@Controller
注解也不需要
@RestController
public class MyController {
@RequestMapping("/test")
public String test(){
return "SUCCESS";
}
}
JSON转换
前后端数据交换中,最常用的格式就是JSON字符串,Spring Boot帮我们做好了Java对象和JSON字符串直接的转换,如果我们需要返回一个JSON字符串,只需要将自定义对象直接返回即可,默认会使用Jackson工具转换成JSON
首先我们定义一个自定义Person类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private int age;
}
然后Controller类中的方法不以String类型为返回值,而是返回一个Person类
@RestController
public class MyController {
@RequestMapping("/test")
public Person test(){
return new Person("cong", 18);
}
}
测试结果如下
可以看到Spring Boot自动帮我们做了JSON转换,返回了Person对象的JSON字符串