《Spring Guides系列学习》guide16 - guide20

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。
在这里插入图片描述
接着上篇看过的guide15,接着往下看。

guide16、Consuming a RESTful Web Service with AngularJS

主要讲的编写一个angularJS的客户端,该客户端使用基于restful web服务。
略过。


guide17、Enabling Cross Origin Requests for a RESTful Web Service

跨域是什么意思?https://segmentfault.com/a/1190000040485198

首先一个url是由:协议、域名、端口 三部分组成。(一般端口默认80)

如:https://blog.moonlet.cn:80

当一个请求url的协议、域名、端口三者之间的任意一个与当前页面url不同即为跨域。

跨源资源共享(CORS)是由大多数浏览器实现的W3C规范,允许您灵活地指定什么样的跨域请求被授权,而不是使用一些不太安全和不太强大的策略,如IFRAME或JSONP。详细可见:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS

Guide涉及注解:

@CrossOrigin:是用来处理跨源资源共享(CORS)的注解。

注解参数解析:

1、 value:指定允许请求源列表,例如:value=“http://example.com”。*表示允许来自任意请求源的请求。

其值存储在响应标头Access-Control-Allow-Origin中。默认情况下,其值为*,允许来自任意请求源的请求。注意:CORS处理时,从Forwarded、X-Forwarded-Host、X-Forwarded-Port、X-Forwarded-Proto取请求源值。

2、origins:value与origins含义相同,可以任选value和origins进行设置。value与origins若同时存在,两者的值需一致,否则启动时会出现异常。

3、allowedHeaders:指定允许实际请求标头列表,例如:allowedHeaders=“Content-Type,Access-Token”。表示允许实际请求带有任意标头。其值存储在响应标头Access-Control-Allow-Headers中。
若为Cache-Control、Content-Language、Expires、Last-Modified、Pragma,则无需设置。默认情况下,其值为
,允许实际请求带有任意标头

4、exposedHeaders:指定允许客户端(如浏览器)访问的响应标头列表,例如:exposedHeaders=“Content-Length”。其值存储在实际CORS请求的响应头Access-Control-Expose-Headers中。默认情况下,只允许客户端访问:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。

5、methods 指定允许请求的HTTP方法。默认情况下,允许请求的HTTP方法与@RequestMapping相同。

6、allowCredentials:指定其值,表示客户端(如浏览器)是否应将凭证(如Cookies)和跨域请求一起发送到服务器。其值存储在预处理响应标头Access-Control-Allow-Credentials中。注意:此选项与配置域建立了高级别的信任,由于公开敏感的信息(如Cookies或CSRF令牌),会增加Web应用程序受攻击的概率。
默认情况下,此值不设置,因此不允许使用任何凭证。

7、maxAge:指定预处理响应的最大缓存期限,单位为秒。其值存储在预处理响应标头Access-Control-Max-Age中。其值设置合理可以有效减少客户端与服务器预处理请求的交互次数。其值为负,表示未定义。
默认情况下,其值为1800秒(30分钟)。

补充:
@CrossOrigin 表示所有的URL均可访问此资源

@CrossOrigin(origins = “http://127.0.0.1:8080”)//表示只允许这一个url可以跨域访问这个
controller

代码说明:@CrossOrigin这个注解用起来很方便,这个可以用在方法上,也可以用在类上。如果你不设置他的value属性,或者是origins属性,就默认是可以允许所有的URL/域访问。


两种使用方法:

一种是直接在controller上加该注解,在类上加,则该类所有的接口方法都被配置:

    @CrossOrigin(origins = "http://localhost:8080")
    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(required = false, defaultValue = "World") String name) {
        System.out.println("==== get greeting ====");
        return new Greeting(counter.incrementAndGet(), String.format(template, name));

第二种是全局CROS,可以更改其中的任何跨域属性:

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}

guide18、Accessing JPA Data with REST

主要讲的是使用 Spring Data REST 创建和检索存储在数据库中的对象。Spring Data REST 采用了Spring HATEOAS和Spring Data JPA的特性,并将它们组合在一起。Spring Data REST 还支持Spring Data Neo4j、Spring Data Gemfire和Spring Data MongoDB作为后端数据存储。

Guide涉及注解:

@RepositoryRestResource: https://docs.spring.io/spring-data/rest/docs/current/api/org/springframework/data/rest/core/annotation/RepositoryRestResource.html

@RepositoryRestResource注解让编程人员可以直接通过repository提供数据接口,在这个“前端负责V和C,后端负责提供数据”的时代,非常方便;并且,可以通过给该注解传入参数’path’来改变URL。

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>, CrudRepository<Person,Long> {

  List<Person> findByLastName(@Param("name") String name);

}

总的来说,spring DATA REST通过简单的代码配置,就可以实现对对象的CURD/分页排序等功能,而不需要编写对应的Controller.

Spring Data JPA 为 Jakarta Persistence API (JPA) 提供存储库支持。它简化了需要访问 JPA
数据源的应用程序的开发

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/


guide19、Accessing MongoDB Data with REST

讲的是基于hypermedia-based(超媒体)的restful 服务访问基于文档的数据。

Spring Data REST 还支持Spring Data JPA、Spring Data Gemfire和Spring Data Neo4j作为后端数据存储。

和上个guide讲的内容差不多,就是数据存放的地方变成了mongoDB.

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends MongoRepository<Person, String> {

  List<Person> findByLastName(@Param("name") String name);

}

继承的存储库接口变为了MongoRepository,内部提供了各种操作数据对象的方法。

Spring Data REST 使用HAL 格式进行 JSON 输出。它很灵活,并提供了一种方便的方式来提供与所服务的数据相邻的链接。


guide20、Producing a SOAP web service

主要讲的是基于WSDL的SOAP web服务区公开不同欧洲国家的数据。

SOAP(原为Simple Object Access Protocol的首字母缩写,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构的信息。

WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。

Guide涉及注解:

@PostConstruct:该注解的功能:当依赖注入完成后用于执行初始化的方法,并且只会被执行一次。该注解是Java jdk提供的注解,而不是Spring框架提供的。

官方文档:https://docs.oracle.com/javase/8/docs/api/javax/annotation/PostConstruct.html

@Endpoint                                                                                      
public class AnnotationOrderEndpoint {

  private final OrderService orderService;

  @Autowired                                                                                   
  public AnnotationOrderEndpoint(OrderService orderService) {
      this.orderService = orderService;
  }

  @PayloadRoot(localPart = "order", namespace = "http://samples")                              
  public void order(@RequestPayload Element orderElement) {                                    
    Order order = createOrder(orderElement);
    orderService.createOrder(order);
  }

  @PayloadRoot(localPart = "orderRequest", namespace = "http://samples")                       
  @ResponsePayload
  public Order getOrder(@RequestPayload OrderRequest orderRequest, SoapHeader header) {        
    checkSoapHeaderForSomething(header);
    return orderService.getOrder(orderRequest.getId());
  }
}

SpringWebServices(Spring-WS)是Spring社区的一个产品,专注于创建文档驱动的Web服务。SpringWebServices旨在促进契约优先的SOAP服务开发,允许使用多种操作XML有效负载的方式之一创建灵活的Web服务。

@Endpoint: 此注解告诉Spring注解这是个类有资格处理soap请求。是spring-ws服务端的核心概念,spring-ws通过Endpoints来定义服务端动作,来接收处理XML请求,并生成响应XML。可以通过@Endpoint注解来创建endpoint,每一个endpoint都可以定义多个处理请求的方法。

@PayloadRoot:一般通过@PayloadRoot可以指定每一个方法处理哪一类的消息

@RequestPayload: 指传入消息将映射到该方法的参数请求对象。

@ResponsePayload: 使Spring WS将返回值映射到响应Order。

可以类比Spring MVC的Controller做个类比,有点相似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值