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