排名前20的REST和Spring MVC面试题 侵立删

本文总结了Java开发者在面试中常遇到的关于Spring MVC和REST的20个问题及解答,涵盖REST概念、Spring MVC注解、HTTP状态码、安全性和自定义实现等方面。

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

转自:http://www.spring4all.com/article/1445

 

原文链接:https://dzone.com/articles/top-20-spring-mvc-interview-questions-answers

作者: Javin Paul

译者:康仔

Java开发者在面试中会问到哪些关于REST和Spring MVC问题呢?点这里可以了解到排名前20个的问题

​ 你好!最近两个月我分享一些使用Spring开发REST的教程,今天,我将分享一些作为Web开发者经常被问到的关于Spring MVC和REST的面试题给Java开发者。

​ 自从Spring Framework成为开发Java Web应用和RESTful服务的主流和标准框架后,在高级开发者身上找到对Spring核心和Spring MVC 的很好的理解是很被期待的。但是,如果工作内容涉及到REST和Web服务,你也需要有意识去了解如何用Spring Framework 开发RESTful Web服务。

​ 从Spring3.1开始,框架对RESTful的API提供的许多的支持得到了很多的拥护。其中,HTTPMessageConverter 能根据从类路径探测的库将你的HTTP响应转换成JSON或 XML 格式,如: Jackson 和JAXB.

​ Spring对RESTful Web服务也提供自定义的注解,如:@RestController ,这使得你自己的REST控制器更简洁,以至于你不需要调用单一的REST API去做那些通用的步骤,就像将响应转换成JSON。

​ 实际上开发安全的Spring RESTful Web服务,Spring Security已经给与很好的支持。由于你不能将生活置于一种未尝试的不安全的REST接口,所以安全的基本如HTTP basic authentication,数字授权, OAuth和JWT 就体现得非常重要。

排行前20的Spring REST Web服务面试题

这里是一些经常被问到的使用Spring Framework 开发RESTful服务的问题。

REST代表着什么?

​ REST代表着抽象状态转移,它是根据http协议从客户端发送数据到服务端,例如:服务端的一本书可以以XML或JSON格式传递到客户端。然而,假如你不熟悉REST,我建议你先看看REST API design and development 这篇文章来更好的了解它。

资源是什么?

​ 资源是指数据在REST架构中如何显示的。将实体作为资源公开 ,它允许客户端通过http方法如: GETPOST,PUT, DELETE等读,写,修改和创建资源。

什么是安全的REST操作?

REST接口是通过HTTP方法完成操作。一些HTTP操作是安全的,如GET和HEAD,它不能在服务端修改资源.换句话说,PUT,POST和DELETE是不安全的,因为他们能修改服务端的资源。

什么是幂等操作? 为什么幂等操作如此重要?

有一些HTTP方法,如:GET,不管你使用多少次它都能产生相同的结果,在没有任何一边影响的情况下,发送多个GET请求到相同的URI 将会产生相同的响应结果。因此,这就是所谓幂等操作。

换句话说,POST方法不是幂等操作 ,因为如果发送多个POST请求,它将在服务端创建不同的资源,但是,假如你用PUT更新资源,它将是幂等操作。

甚至多个PUT请求被用来更新服务端资源,将得到相同的结果。你可以通过Pluralsight 学习HTTP Fundamentals 课程来了解HTTP协议和一般的HTTP的更多幂等操作。

REST是可扩展的或说是协同的吗?

是的,REST 是可扩展的和可协作的。它既不托管一种特定的技术选择,也不定在客户端或者服务端。你可以用 JavaC++Python, 或 JavaScript 来创建RESTful Web服务,也可以在客户端使用它们。我建议你读一本关于REST接口的书来了解更多,如:RESTful Web Services 。

RestTemplate的优势是什么?(答案)

在Spring framework 中,RestTemplate 类是模板方法模式 的实现。跟其他主流的模板类相似,如 JdbcTemplate 或 JmsTempalte ,它将在客户端简化跟RESTful Web服务的集成。正如在RestTemplate 例子中显示的一样,你能非常容易地用它来调用RESTful Web服务。

REST用哪种HTTP方法呢?

REST能用任何的HTTP方法,但是,最受欢迎的是用GET来检索服务端资源,用POST来创建服务端资源, 用PUT来更新服务端资源 和用DELETE来删除服务端资源。

HttpMessageConverter在Spring REST中代表什么?

HttpMessageConverter 是一种策略接口 ,它指定了一个转换器,它可以转换HTTP请求和响应 。Spring REST用这个接口转换HTTP响应到多种格式,例如:JSON或XML.

每个HttpMessageConverter 实现都有一种或几种相关联的MIME协议。Spring使用“Accept”的标头来确定客户端所期待的内容类型。

然后,它将尝试找到一个注册的HTTPMessageConverter,它能够处理特定的内容类型,并使用它将响应转换成这种格式,然后再将其发送给客户端。如果您是Spring MVC的新手,请参见Spring 5: Beginner to Guru 。

如何创建HttpMessageConverter的自定义实现来支持一种新的请求/响应?(回答)

您仅需要创建AbstractHttpMessageConverter的实现,并使用WebMvcConfigurerAdapter extendmessageconverter()方法注册它,该方法可以生成一种新的请求/响应类型。

REST正常是无状态的吗? (答案)

是的,REST API应该是无状态的,因为它是基于HTTP的,它也是无状态的。REST API中的请求应该包含处理它所需的所有细节。它不应该依赖于以前或下一个请求或服务器端维护的一些数据, 像会话。REST规范为使其无状态设置了一个约束,在设计REST API时,您应该记住这一点。

@RequestMapping注解是做什么的? (答案)

@Requestmapping注解是用于将web请求映射到Spring Controller方法。您可以基于HTTP方法映射一个请求,例如GET、POST和各种其他参数。

例如,如果您正在使用Spring开发一个基于rest的web服务,那么您可以使用、生产和消费属性以及媒体类型标注,以表明该方法仅用于生产或消费JSON,如下所示:

@RequestMapping (method = RequestMethod.POST, consumes="application/json")
public Book save(@RequestBody Book aBook) {
   return bookRepository.save(aBook);
}

类似地,你可以创建其他处理程序方法来产生JSON或XML。如果您不熟悉这些注释,那么我建议您加入 Spring MVC For Beginners 课程,为初学者学习基础知识。

@Controller是原型吗? @RestController 是原型吗? (答案)

是的,@Controller和@Restcontroller都是原型。@Controller实际上是Spring的@Component原型注解的特定版。这意味着带有@Controller的类也会被Spring容器自动检测到,容器组件扫描过程的一部分。

而且,@Restcontroller是用于REST式web服务的@Controller的专门化。它不仅结合了@ResponseBody 和@Controller注解,而且还赋予了控制器类更大的意义,以清楚地表明它处理的是RESTful 请求。

你的Spring框架可能还会使用这个注释来提供一些与REST API开发相关的更有用的特性。

@Controller and @RestController有什么区别? (答案)

@ Controller和@RestController注释有许多差异,这个在我以前的文章中讨论过(见答案更多!),但最重要的是,随着@RestController 自动注解@ResponseBody,这意味着您不需要单独与@ResponseBody注解注释处理程序方法。

这使得使用Spring的REST式web服务的开发更加容易。您可以在这里看到更多关于Spring Boot的知识,以及它如何帮助您创建基于Spring MVC的web应用程序。

file你需要什么时候在Spring MVC中 使用@ResponseBody注解? (答案)

@Responsebody注解可以放在一个方法上,以表明返回类型应该直接写入HTTP响应体(不要放在模型中,或者解释为一个视图名)。

例如:

@RequestMapping(path = "/hello", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {
   return "Hello World";
}

另外,你也可以使用@RestController 注解来取代@Controller注释。这将消除使用@Responsebody的需要,因为正如前面的答案所讨论的那样,它会自动使用@Restcontroller注释 。

@PathVariable在Spring MVC做了什么? 为什么REST在Spring中如此有用? (答案)

这是Spring MVC中有用的注解之一,它允许您从URI读取值,比如查询参数。它在使用Spring创建RESTful web服务时特别有用,因为在REST中,资源标识符是URI的一部分。这个问题通常由经验丰富的Spring MVC开发人员提出,他们有4到6年的经验。

例如,如果你想要学习如何提取id,那么这个URL将会很有帮助,然后您就可以使用Spring MVC的@Pathvariable注释了。如果你不熟悉Spring MVC注解,那么Spring MVC For Beginners: Build Java Web App in 25 Steps 是一个很好的起点。

file

删除的HTTP状态返回码是什么 ? (答案)

在删除成功之后,您的REST API应该返回什么状态代码,并没有严格的规则。它可以返回200或204没有内容。

一般来说,如果删除操作成功,响应主体为空,返回204。如果删除请求成功且响应体不是空的,则返回200。

CRUD是什么意思 ? (答案)

CRUD是创建、读取、更新和删除的一种简短形式。在REST API中,POST用于创建资源,GET用于读取资源,PUT用于更新资源,而DELETE用于从服务器移除资源。这是另一个初学者级别的Spring MVC问题,在1到3年的时间里作为一个有经验的程序员。

@EnableWebMVC一般用在哪里? (答案)

当Java配置被用来配置Spring MVC代替XML时,启用@Enablewebmvc注解来启用Spring MVC是必须的。它等同于在XML中配置 。

它支持@Controller-带注解的类,它使用@Requestmapping将传入的请求映射到处理程序方法,而这些方法对于Spring对Java配置的支持并不熟悉。在Udemy上的Spring Master课程是一个很好的起点。

在Spring MVC中什么时候用到@ResponseStatus注解? (答案)

作为一个3到5年的有经验的Spring开发人员,这是一个很好的问题。在Spring MVC和REST的错误处理过程中,需要标注@Responsestatus注解。通常,当在服务器端抛出一个错误或异常时,web服务器将返回一个全面的HTTP状态码500——内部服务器错误。

这可能适用于人类用户,但不适用于REST客户端。如果没有找到资源,您需要向它们发送适当的状态码,如404。这就是您可以使用@Responsestatus标注的地方,它允许您在异常情况下发送自定义HTTP状态码和适当的错误消息。

为了使用它,您可以创建自定义异常,并使用@Responsestatus注解和适当的HTTP状态码和理由对它们进行注释。

当这些异常从控制器的处理程序方法中抛出,而在其他任何地方都没有处理时,那么使用适当的HTTP状态码的适当的HTTP响应被发送到客户端。

例如,如果您正在为一个提供图书信息的图书馆编写一个RESTful web服务,那么您可以使用@Responsestatus来创建一个异常,当没有找到一本书而不是内部服务器错误(500)时返回HTTP响应代码404,如下所示:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Book")  // 404
 public class BookNotFoundException extends RuntimeException {
     // ...
 }

假如异常从任何方法抛出,那么HTTP 404错误代码“没有这样的书”将返回给客户端。

如果你不熟悉Spring MVC的基本概念,安全和REST,我建议你在下一份工作面试前去学习一下 REST with SpringLearn Spring Security的课程来获得一些经验。这两个课程是专门设计为你提供一些实际经验,来提高你的Spring MVC,REST,和Spring Security的知识和经验。

REST安全吗? 你能做什么来保护它? (答案)

这个问题主要是由经验丰富的Java程序员提出的,他们有2到5年的使用REST和Spring的经验。安全是一个宽泛的术语;它可能意味着消息的安全性,这是通过认证和授权提供的加密或访问限制提供的。REST通常不是安全的,但是您可以通过使用Spring Security来保护它。

至少,你可以通过在Spring Security配置文件中使用HTTP来启用HTTP基本认证。类似地,如果底层服务器支持HTTPS,您可以使用HTTPS公开REST API。

file

REST能与传输层安全性(TLS)一起工作吗 ? (安全)

传输层安全(TLS)用于客户端和服务器之间的安全通信。它是SSL(安全套接字层)的继承者。由于HTTPS可以同时使用SSL和TLS,REST也可以与TLS一起工作。

实际上,在REST中,由服务器来实现安全协议。如果服务器支持SSL,可以使用HTTP和HTTPS访问相同的REST式web服务。

如果您正在使用Tomcat,您可以了解更多关于如何在Tomcat中启用SSL的知识。

为了开发RESTful Web服务需要在类路径中加入Spring MVC吗? (答案)

这个问题经常被有1到2年经验的Java程序员在Spring的中提出。简短的回答是:是的——您需要在Java应用程序的类路径中使用Spring MVC来开发RESTful web服务。

它实际上是Spring MVC,它提供了所有有用的注解,比如@Restcontroller、@Responsecode、@Responsebody、@Requestbody和@Pathvariable(参见REST with Spring)。因此,你必须使用spring-mvc.jar或在你的pom.xml中添加适当的Maven配置。

现在,对于初学者和有经验的Java JEE开发人员来说,这就是他们经常被问到的一些常见问题。如果你要参加Pivotal的Spring Certification,这些问题也会对你了解Spring REST的知识非常有用。

如果你已经在为Spring开发者认证做准备,并且您需要从Spring认证的角度来回答更多这样的问题,你将会在David Mayer的Core Spring Simulator 上发现很多问题,这是目前最好的通过Spring认证的模拟器之一。祝你面试好运!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值