@GetMapping 和 @GetExchange 有什么区别?

问题描述 投票:0回答:1

从春季6开始,推出了

@GetExchange
@PostExchange
@PutExchange
@DeleteExchange
@PatchExchange

据我所知,我们已经有相同的注释来做同样的事情

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.service.annotation.GetExchange;

@RestController
public class Controller {
    
    @GetMapping("mapping")
    public ResponseEntity<?> getMapping() {
        return ResponseEntity.ok("mapping");
    }
    
    @GetExchange("exchange")
    public ResponseEntity<?> getExchange() {
        return ResponseEntity.ok("exchange");
    }
}

我的问题,

  • 这两个注释有什么区别。
  • 我们应该何时何地使用
    @GetMapping
    @GetExchange
java spring spring-boot
1个回答
0
投票

@HttpExchange
系列注释的主要目的是定义一个接口,可用于使用
HttpServiceProxyFactory
创建代理。也就是说,当您是客户端发起 HTTP 请求时,它最有用。

@HttpExchange("/persons")
interface PersonService {
    @GetExchange("/{id}")
    Person getPerson(@PathVariable Long id);

    @PostExchange
    void add(@RequestBody Person person);
}

HttpServiceProxyFactory factory = /* something */;
PersonService service = factory.createClient(PersonService.class);

该接口也可以直接在控制器中实现,但与 @HttpMapping 系列注释相比,

对参数类型有更多限制。如果您同时拥有 Spring 客户端和服务器并且希望它们共享相同的代码,这可能会很有用。

@HttpMapping

映射注释支持
更广泛的参数类型,因此如果您的代码仅在服务器上而不是在客户端上使用,那么使用它们将为您提供更多选择。

© www.soinside.com 2019 - 2024. All rights reserved.