Java程序员经典REST和Spring MVC面试题!

在Java开发的面试中,你会被问到的REST和Spring MVC的问题吗?本文将分享一些常见的Spring MVC和REST面试问题,以便Java程序员能够在Web开发的面试中更加游刃有余!

Java程序员经典REST和Spring MVC面试题!

由于Spring框架是开发Java Web应用程序和RESTful Web服务的最流行和标准的框架,因此任何高级Java开发人员都希望能够很好地了解Spring核心和Spring MVC。但是,如果作业描述提到REST和Web服务,你还需要了解如何使用Spring框架开发RESTful Web服务。

从Spring 3.1开始,该框架得到了很大的增强,以支持RESTFul API所需的许多功能。HTTPMessageConverter只需检测类路径中的相关库,即可将HTTP响应转换为JSON或XML。例如Jackson和 JAXB。

Spring还为RESTful Web服务提供自定义注释,例如: @RestController,它可以使你的Controller REST更加清晰,因此你不需要执行每个REST API所需的常见操作,例如将响应转换为JSON。

对于在生产环境中开发RESTful Web服务的安全性,还必须具备Spring Security的知识。要非常了解安全基础知识,HTTP基本身份认证,摘要认证,OAuth和JWT。

以下是有关在Spring框架中使用REST Web服务的一些常见问题。一共总结了22大问题:

1.REST代表什么?

REST代表REpresentational State Transfer,它使用HTTP协议将数据从客户端发送到服务器。但是,如果你不熟悉REST,我建议你首先查看REST API设计和开发,以便更好地理解它。

2.什么是资源?

资源是REST架构中数据的表示方式。通过将实体公开为资源,它允许客户端使用HTTP方法读取,写入,修改和创建资源,例如,GET,POST,PUT,DELETE等。

3.什么是安全的REST操作?

REST API使用HTTP方法执行操作。一些不修改服务器资源的HTTP操作称为安全操作,包括GET和HEAD。另一方面,PUT,POST和DELETE是不安全的,因为它们修改了服务器上的资源。

4.什么是幂等操作?为什么幂等性很重要?

有一些HTTP方法,比如GET。无论你使用多少次都产生相同的响应,向同一个URI发送多个GET请求将导致相同的响应而没有任何副作用。因此,这被称为幂等。

另一方面,POST不是幂等的,因为如果你发送多个POST请求,它将导致在服务器上创建多个资源,但是,如果你使用它来更新资源,PUT也是幂等的。

甚至可以使用多个PUT请求来更新服务器上的资源,并给出相同的最终结果。

5.REST可扩展和/或可互操作吗?

是的,REST具有可扩展性和可互操作性。它不要求在客户端或服务器端特定的技术选择。你可以使用Java,C ++,Python或JavaScript来创建RESTful Web服务并在客户端使用它们。我建议你阅读一本关于REST API的好书,比如RESTful Web Services,以了解有关REST的更多信息。

6.RestTemplate的优点是什么?

RestTemplate类是Spring框架中Template方法模式的实现。与其他流行的模板类(如JdbcTemplate或JmsTempalte)类似,它还简化了与客户端上的RESTful Web服务的交互。你可以非常轻松地使用它来使用RESTful Web服务器。

7.REST使用哪些HTTP方法?

REST可以使用任何HTTP方法,但最常用的方法是GET用于检索资源,POST用于创建资源,PUT用于更新资源,DELETE用于从服务器中删除资源。

8.什么是Spring REST中的HttpMessageConverter?

HttpMessageConverter是一个策略接口,它指定可以从HTTP请求和响应转换的转换器。Spring REST使用此接口将HTTP响应转换为各种格式,例如JSON或XML。

每个HttpMessageConverter实现都有一个或多个与之关联的MIME类型。Spring使用“Accept”标头来确定客户端期望的内容类型。

然后,它将尝试查找已注册的HTTPMessageConverter,该HTTPMessageConverter能够处理该特定内容类型,并在将响应发送到客户端之前将其用于将响应转换为该格式。

9.如何创建HttpMessageConverter的自定义实现以支持新类型的请求/响应?

你只需要创建AbstractHttpMessageConverter的实现,并使用WebMvcConfigurerAdapter#extendMessageConverters()方法将其注册到生成新类型请求/响应的类。

10.REST通常是无状态的吗?

是的,REST API应该是无状态的,因为它基于HTTP,也是无状态的。REST API中的请求应包含处理它所需的所有详细信息。它不应该依赖于先前或下一个请求或服务器端维护的某些数据,例如会话。REST规范提出了一个使其无状态的约束,你应该在设计REST API时牢记这一点。

11.@RequestMapping注释有什么作用?

@RequestMapping注释用于将Web请求映射到Spring Controller方法。你可以根据HTTP方法映射请求,例如GET,POST和其他各种参数。

例如,如果使用Spring开发RESTful Web服务,则可以使用,生成和使用属性以及媒体类型注释,以指示此方法仅用于生成或使用JSON,如下所示:

Java程序员经典REST和Spring MVC面试题!

同样,你可以创建其他处理程序方法来生成JSON或XML。

12.@Controller是一个stereotype吗? @RestController是一个stereotype吗?

是的,@ Controller和@RestController都是stereotype。 @Controller实际上是Spring的@Component构造型注释的特化。这意味着使用@Controller注释的类也将由Spring容器自动检测,作为容器组件扫描过程的一部分。

而且,@ RestController是RESTful Web服务的@Controller的特化。它不仅结合了@ResponseBody和@Controller注释,而且还为控制器类提供了更多的含义,以清楚地表明它处理RESTful请求。

你的Spring框架也可以使用此批注来提供与REST API开发相关的一些更有用的功能。

13.@Controller和@RestController有什么区别?

@Controller和@RestController注释之间存在许多差异,但最重要的是使用@RestController自动获取@ResponseBody注释,这意味着你不需要使用@ResponseBody注释单独注释处理程序方法。这使得使用Spring更容易开发RESTful Web服务。

14.你什么时候需要在Spring MVC中使用@ResponseBody注释?

@ResponseBody注释可以放在一个方法上,以指示返回类型应该直接写入HTTP响应主体(而不是放在模型中,或解释为视图名称)。

例如:

Java程序员经典REST和Spring MVC面试题!

或者,你也可以使用@RestController注释而不是@Controller注释。这将消除使用@ResponseBody的需要,因为正如前面的答案中所讨论的,它会自动带有@RestController注释。

15.@PathVariable在Spring MVC中做了什么?为什么它在REST中与Spring有用?

这是Spring MVC中有用的注释之一,它允许你从URI中读取值,例如查询参数。它在使用Spring创建RESTful Web服务时特别有用,因为在REST中,资源标识符是URI的一部分。

16.成功的DELETE语句的HTTP状态返回码是什么?

在成功删除DELETE后,REST API应返回的状态代码没有严格的规定。它可以返回200 Ok或204 No Content。

通常,如果DELETE操作成功,则响应主体为空,返回204.如果DELETE请求成功且响应主体不为空,则返回200。

17.CRUD是什么意思?

CRUD是创建,读取,更新和删除的简短形式。在REST API中,POST用于创建资源,GET用于读取资源,PUT用于更新资源,DELETE用于从服务器中删除资源。这

18.你在哪里需要@EnableWebMVC?

当使用Java配置来配置Spring MVC而不是XML时,需要@EnableWebMvc注释来启用Spring MVC。它等同于XML配置中的<mvc:annotation-driven>。

它支持@Controller-annotated类,它们使用@RequestMapping将传入请求映射到不熟悉Spring对Java配置支持的处理程序方法。

19.什么时候在Spring MVC中需要@ResponseStatus注释?

在Spring MVC和REST中的错误处理期间,需要@ResponseStatus注释。通常,当在服务器端抛出错误或异常时,Web服务器将返回一揽子HTTP状态代码500 - 内部服务器错误。

这可能适用于用户,但不适用于REST客户端。如果找不到资源,你需要向他们发送正确的状态代码,如404。在这里你可以使用@ResponseStatus注释,它允许你在发生异常时发送自定义HTTP状态代码以及正确的错误消息。

为了使用它,你可以使用@ResponseStatus注释和正确的HTTP状态代码和原因创建自定义异常并对其进行注释。

当从控制器的处理程序方法抛出此类异常而不在其他任何地方处理时,则会将具有正确HTTP状态代码的相应HTTP响应发送到客户端。

例如,如果你正在为提供书籍信息的库编写RESTful Web服务,则可以使用@ResponseStatus创建一个异常,该异常在找不到书籍而不是内部服务器错误时返回HTTP响应代码404(500 ), 如下所示:

Java程序员经典REST和Spring MVC面试题!

如果从任何处理程序方法抛出此异常,则将返回具有“No such Book”原因的HTTP错误代码404。

20.REST安全吗?你能做些什么来保护它?

安全是一个广义的术语;它可能意味着消息的安全性,这是由使用身份认证和授权提供的加密或访问限制提供的。REST通常不安全,但你可以使用Spring Security来保护它。

至少,你可以在Spring Security配置文件中使用HTTP启用HTTP基本身份认证。同样,如果底层服务器支持HTTPS,则可以使用HTTPS公开REST API。

21.REST是否与传输层安全性(TLS)一起使用?

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

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

22.你是否需要在类路径中使用Spring MVC来开发RESTful Web服务?

是的。你需要在Java应用程序的类路径中使用Spring MVC来使用Spring框架开发RESTful Web服务。

实际上,Spring MVC提供了所有有用的注释,如@RestController,@ ResponseCode,@ ResponseBody,@ RequestBody和@PathVariable。因此,你必须在pom.xml中使用spring-mvc.jar或相应的Maven条目。

相关推荐