Java Spring Rest Call使用父类(super class)获取子类

标签 java spring mongodb rest inheritance

我试图将多个相似的文档存储在同一个文档存储(MongoDB)中,即扩展 Foo 的所有类都存储在 Foo 集合中。

我有一个名为 findById 的休息端点,它返回一种可选类型,例如/foo/{id}.

当我调试它时,它返回一个 Bar 类(它扩展了 Foo

但是,当我从 java 客户端应用程序调用它时。

Foo 类

    @Data
    @Document(collection = "foo")
    public abstract class Foo {
        @Id
        private int id;

        public Foo(){}
        public Foo(int id){
            this.id = id;
        }

酒吧类

    @Document(collection = "foo")
    @Data
    public class Bar extends Foo{
        private String text;

        @PersistenceConstructor
        public EnterValue(int id, String text){
            super(id);
            this.text = text;
        }

        @Override
        public int getId() {
            return super.getId();
        }

        @Override
        public int setId(UUID id) {
            super.setId(id);
        }

        public String getText(){
            return this.text;
        }

        public void setText(String text) {
            this.text = text;
        }

客户端代码:

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
    HttpEntity<String> entity = new HttpEntity<>(headers);
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Foo> response = restTemplate.exchange("http://localhost:8080/foo/123",HttpMethod.GET,entity,Foo.class);

提取类型 [class Foo] 和内容类型 [application/json;charset=UTF-8] 的响应时出现错误。

最佳答案

  • 您放入 ResponseEntity 菱形运算符中的类型不能是抽象的;
  • 它必须实现可序列化。

public class Bar extends Foo implements Serializable { ... } ... ResponseEntity<Bar> response = restTemplate.exchange("<a href="http://localhost:8080/foo/123" rel="noreferrer noopener nofollow">http://localhost:8080/foo/123</a>", HttpMethod.GET, entity, Bar.class);

关于Java Spring Rest Call使用父类(super class)获取子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692999/

相关文章:

java - hibernate session.save() 插入与对象不同的值

java - [Java]并发修改异常;迭代器不起作用

java - 如何从 Spring 2.5 HTTP 远程处理调用中获取响应的大小?

node.js - Mongoose FindOne 方法始终返回 'null'

mongodb - 通过配置文件设置将 mongod 作为服务启动

java - 什么情况会导致 Java 线程意外返回?

java - 使用 spring 获取位于 Web 应用程序的 src 文件夹中的文件路径。

java - Spring 集成: start JPA polling only when all the results of last polling has been processed

java - 为什么 Spring 调度程序加载两次?

node.js - mongoose#populate 在数组内的嵌套对象中返回 null