繁体   English   中英

将接口实现作为Spring @RequestBody参数传递

[英]Passing an interface implementation as a Spring @RequestBody argument

我有以下课程:

public class ItemController implements ApiController<Item> {
  @RequestMapping(value = "/", method = RequestMethod.POST)
  public Item create(@RequestBody final CreateItemRequest request) {
    // ...
  }
}

public interface ApiController<T> {
  T create(@RequestBody final ApiRequest request);
}


public class CreateItemRequest implements ApiRequest {
  // ...
}

public interface ApiRequest {
  // ...
}

Intellij警告我ItemController不实现ApiController 我的工作假设是,作为ApiRequest的实现, CreateItemRequest是上面所写的create方法签名的有效类型。 但是,Intellij坚持request参数的类型应为ApiRequest

我的目标是为诸如CreateItemRequest类的类实现一个通用接口。 该接口将在ApiController方法中以通用Y方式进行ApiController

显然,我不是泛型向导,所以我在这里混了什么?

编辑: ThingRequest正确实现ApiRequest

更新:

实现接口时,不能缩小方法参数! -的

您有一个interface ApiController<T> ,它的方法为T create(final ApiRequest request) 该接口告诉客户端,他可以调用ANY create的方法!!! 实现类ApiRequest ,因此不允许有一个实现ApiController制约的参数类型createCreateItemRequest


旧答案:

你写了:

public interface ApiController<T> {
  T create(@RequestBody final ApiRequest request);
}

public class ItemController implements ApiController<Item> {
  @RequestMapping(value = "/", method = RequestMethod.POST)
  public Thing create(@RequestBody final CreateItemRequest request) {
    // ...
  }
}

一个问题是方法参数, 问题是返回类型! Thing不是Item

好的,您告诉我们这是错字,所以请阅读上面的更新


顺便说一句:我强烈建议将@Override注释添加到实现/重写其他方法的方法中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM