当前位置: 首页 > 知识库问答 >
问题:

继承法Spring hateoas methodOn

王伯寅
2023-03-14

我试图使用Spring hateoas从抽象控制器解析继承endpoint的URL。

我认为先给出代码会使问题更容易理解。

package com.stackoverflow.question.spring.rest.controllers;

import org.springframework.hateoas.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

public class AbstractController {


    @RequestMapping(value="/cat", method=RequestMethod.GET)
    public Resource<String> cat() {
        return new Resource<>("cat");
    }
}
package com.stackoverflow.question.spring.rest.controllers;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;

import org.springframework.hateoas.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/test", produces = { "application/json; charset=utf-8" })
public class TestController extends AbstractController {

    @RequestMapping(method = RequestMethod.GET)
    public Resource<String> test() {
        return new Resource<>("test", linkTo(
                methodOn(TestController.class).cat()).withRel("cat"), linkTo(
                methodOn(TestController.class).uglyfix()).withRel("uglyfix"));
    }

    @RequestMapping(value = "/uglyfix", method = RequestMethod.GET)
    public Resource<String> uglyfix() {
        return new Resource<>("ugly fix", linkTo(TestController.class).slash(
                "cat").withRel("cat"));
    }

}
{
    "content": "test",
    "links": [
        {
            "rel": "cat",
            "href": "http://localhost:8080/resources/cat"
        },
        {
            "rel": "uglyfix",
            "href": "http://localhost:8080/resources/test/uglyfix"
        }
    ]
}
{
    "content": "test",
    "links": [
        {
            "rel": "cat",
            "href": "http://localhost:8080/resources/test/cat"
        },
        {
            "rel": "uglyfix",
            "href": "http://localhost:8080/resources/test/uglyfix"
        }
    ]
}

也许在抽象控制器的顶部添加@requestmapping(value=“test”)可以解决我的问题,但我也不想要这个解决方案,因为我希望将我的extends my抽象控制器与多个控制器一起使用。

有没有一个干净的方法来做,我所期待的?

共有1个答案

淳于健
2023-03-14

我觉得有点愚蠢,因为我刚刚从0.9.0.release中迁移了Spring Hateoas0.17.0.release,它解决了我的问题。

 类似资料:
  • 本文向大家介绍C#继承方法,包括了C#继承方法的使用技巧和注意事项,需要的朋友参考一下 示例 有几种方法可以继承            

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 有人能解释我这里发生了什么,为什么? 此代码的输出将是3 3,3,3。 如果我只用 getter 取消注释第 1 行,输出将是 3 2、2、2。 如果我只用setter取消对第2行的注释,输出将是1 1,1,1。 如果我取消对第1行和第2行的注释(用setter和getter),输出将是1 3,3,3。 如果用子类中的代码覆盖父类中的方法,则该覆盖方法不能访问私有成员变量,即使父类中被覆盖的方法可

  • 一个类可以从另一个类继承方法、属性和其他的特性。当一个类从另一个类继承的时候,继承的类就是所谓的子类,而这个类继承的类被称为父类。在 Swift 中,继承与其他类型不同的基础分类行为。 在 Swift 中类可以调用和访问属于它们父类的方法、属性和下标脚本,并且可以提供它们自己重写的方法,属性和下标脚本来定义或修改它们的行为。Swift 会通过检查重写定义都有一个与之匹配的父类定义来确保你的重写是正

  • 本页包含内容: 定义一个基类(Base class) 子类生成(Subclassing) 重写(Overriding) 防止重写 一个类可以继承(inherit)另一个类的方法(methods),属性(property)和其它特性。当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。

  • 构造函数的继承 __proto__属性 属性的继承 对象的原生属性 对象的继承属性 获取所有属性 对象的拷贝 参考链接 构造函数的继承 JavaScript通过构造函数生成实例对象,所以要实现对象的继承,就是要实现构造函数的继承。 假定有一个Shape构造函数。 function Shape() { this.x = 0; this.y = 0; } Shape.prototype.mo

  • 目标 了解类分层结构的概念 了解实现构造方法的各种方式 了解何时和为什么使用抽象类和方法 了解如何将一个引用从一个类赋给一个类型属于另一个类的变量。 继承的工作原理 Java 代码中的类存在于分层结构中。分层结构中的给定类上方的类是该类的超类。这个特定的类是分层结构中每个更高层的类的子类。子类继承它的超类。java.lang.Object 类位于类分层结构的顶部 — 所以每个 Java 类是 Ob