@Controller、@RestController注解区别详解

yizhihongxing

下面是关于“@Controller、@RestController注解区别详解”的完整攻略。

一、@Controller注解

@Controller是SpringMVC中常用的控制器注解,用于标记此类为控制器,能够处理用户的请求并返回相应的数据。

1.1 示例代码

@Controller
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping("/world")
    public String sayHello() {
        return "hello world";
    }
}

上述代码定义了一个HelloController控制器处理/hello/world的请求,返回字符串"hello world"。

需要说明的是,@RequestMapping注解用来匹配请求路径。

1.2 返回值类型

@Controller控制器方法的返回值类型可以是字符串、ModelAndView或void类型。

如果是字符串类型,则对应视图名称;如果是ModelAndView类型,则可以传递视图名称和模型数据;如果是void类型,则需要配合@RequestMapping的produces属性使用,指定返回数据类型。

1.3 视图解析器

@Controller控制器返回字符串类型时,需要配合视图解析器处理视图。

在SpringMVC配置文件中,可以配置多个视图解析器,优先级按照配置的顺序逐个匹配。

示例配置:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

二、@RestController注解

@RestController是Spring4.0版本新增的注解,主要用于构建RESTful风格的API接口,一般情况下将返回数据直接作为响应体返回。

相比于使用@Controller注解,使用@RestController注解的控制器返回值不会被视图解析器解析,而是以JSON、XML等格式直接返回数据给客户端。

使用这个注解可以大大简化开发,并提高数据传输效率,常用于前后端分离的开发模式。

2.1 示例代码

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {
        User user = new User(id, "Tom", 18);
        return user;
    }
}

上述代码定义了一个ApiController控制器处理/api/user/{id}的GET请求,返回一个User对象。

需要说明的是,@PathVariable注解用于RESTful风格的URL路径参数获取。

2.2 返回值类型

@RestController控制器方法的返回值类型可以是任意Java类,SpringMVC会自动将该对象转化为JSON或XML格式返回给客户端。

同时,也可以使用@ResponseBody注解,将数据转化为JSON或XML格式返回。

2.3 内容协商 Content Negotiation

当使用@RestController注解时,在返回值类型为HttpEntity<T>时,可以通过controller方法中设置响应头来控制输出格式:

@GetMapping(value = "/{id}", produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public HttpEntity<User> getUser(@PathVariable Long id) {
    User user = new User(id, "Tom", 18);
    return new ResponseEntity<User>(user, HttpStatus.OK);
}

由于Spring MVC使用了内容协商 Content Negotiation 来输出数据,我们还可以设置在请求头中 Accept 来控制输出数据的格式。

总结

@RestController相对于@Controller,主要是增加了对RESTful API的支持,也就是直接将返回结果作为json/xml输出给客户端,而不需要使用@ResponseBody来配合。

当我们需要返回数据时,如果是直接输出json/xml数据格式,那么应该使用 @RestController ;如果需要跳转页面,则应该使用 @Controller

以上是关于“@Controller、@RestController注解区别详解”的攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@Controller、@RestController注解区别详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 详解Spring如何整合Mybatis

    下面我会详细讲解如何整合Spring和MyBatis的攻略,包括必要的配置和示例。 一、添加依赖 首先需要在pom.xml中添加以下依赖: <!– Spring –> <dependency> <groupId>org.springframework</groupId> <artifactId>…

    Java 2023年5月19日
    00
  • Spring Data Jpa返回自定义对象的3种方法实例

    下面是关于“Spring Data Jpa返回自定义对象的3种方法实例”的完整攻略。 1. 什么是自定义对象? 在使用Spring Data JPA时,我们通常通过继承JpaRepository接口来完成数据的操作。但是,有时候我们需要在查询过程中返回自定义的对象,而不是返回实体类对象。 例如,在一个电商网站中,我们需要统计某个商品的销量排行榜。我们需要查询…

    Java 2023年6月2日
    00
  • Java 重载、重写、构造函数的实例详解

    Java是一门支持面向对象的编程语言,重载、重写、构造函数是Java面向对象编程中的重要概念。本文将为你详细讲解Java的重载、重写、构造函数的实例详解。 Java 重载 函数重载是指函数名称相同,但参数列表不同的一组函数。Java允许使用重载的方法、构造函数和操作符。以下是Java重载函数的实例: public class OverloadDemo { p…

    Java 2023年5月26日
    00
  • java(jsp)整合discuz同步登录功能详解

    下面是详细讲解“java(jsp)整合discuz同步登录功能详解”的攻略。 介绍 Discuz是一个比较古老的论坛系统,它有很多的功能以及插件,而且也有很多网站在使用它。如果你已经有了一个成熟的Java Web网站,那么也许你希望这个网站能够跟Discuz集成起来,实现同步登录的功能。这篇攻略将介绍如何实现Java Web和Discuz之间的同步登录功能。…

    Java 2023年6月15日
    00
  • java读取文件字符集示例方法

    针对“java读取文件字符集示例方法”的完整攻略,我将提供以下过程和两个示例: 一、文件字符集的概念和了解 在学习如何读取文件字符集之前,先了解以下文件字符集的概念。文件字符集可以理解为一个字符集编码方式,它规定了计算机语言在计算机内表示字符或者数字时所采用的编码方式。在不同的操作系统或者软件中,对于字符集的选择会不同。如果我们读取了一个文件,但是文件中的字…

    Java 2023年5月19日
    00
  • 什么是Java字节码插装?

    Java字节码插装是一种通过修改Java类文件字节码,实现在应用程序运行时对代码进行动态修改和增强的技术。Java字节码插装包括对类加载器的操作和对字节码的操作,能够在类加载时,动态修改class文件中的指令,从而增强原有应用的功能或实现新的功能。 Java字节码插装的使用攻略如下: 选择字节码修改工具 字节码修改工具是进行字节码插装的关键工具,常用的字节码…

    Java 2023年5月11日
    00
  • Java实现监听文件变化的三种方案详解

    Java实现监听文件变化的三种方案详解 在Java编程中,经常需要对文件进行监听,以便在文件发生更新时及时做出相应的处理。下面将介绍三种实现文件监听的方案,分别是Java 7的WatchService、commons-io库、以及第三方库jnotify。 1. Java 7的WatchService Java 7引入了WatchService API,它可以…

    Java 2023年5月20日
    00
  • 微信公众号开发之设置自定义菜单实例代码【java版】

    下面是针对“微信公众号开发之设置自定义菜单实例代码【java版】”的完整攻略: 概述 本文主要介绍使用 Java 编写微信公众号自定义菜单的示例代码。自定义菜单包括一级菜单和二级菜单,每个一级菜单下可以有多个二级菜单,一级菜单最多包含3个二级菜单。 步骤 步骤一:获取授权 首先,您需要前往微信公众平台申请账号并通过审核。审核通过后,就可以在管理后台获取到 A…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部