为了账号安全,请及时绑定邮箱和手机立即绑定

缺少 linkTo 和 methodOn 声明 Spring HATEOAS STS

缺少 linkTo 和 methodOn 声明 Spring HATEOAS STS

RISEBY 2023-04-13 16:42:12
我正在关注 Spring RESTfull API 教程。本教程要求在某些时候使用 Spring HATEOAS。但是,我的 IDE STS找不到方法 linkTo 和 methodOn 的引用。@GetMapping("/employees/{id}")Resource<Employee> one(@PathVariable Long id) { Employee emp = repository.findById(id)  .orElseThrow(() -> new EmployeeNotFoundException(id)); return new Resource<>(emp,        linkTo(methodOn(EmployeeController.class).one(id)).withSelfRel(),        linkTo(methodOn(EmployeeController.class).all()).withRel("employees") );}Spring HATEOAS 依赖项也在这里:    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-hateoas</artifactId>    </dependency>我尝试过的事情:更新maven项目
查看完整描述

5 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我遵循相同的教程并遇到了方法“ linkTo ”和“ methodOn ”的相同问题。


似乎导入应该来自:


import static org.springframework.hateoas.server.mvc.ControllerLinkBuilder.*;

但是,它似乎已被弃用,现在建议使用 WebMvcLinkBuilder :


import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;

我在这个类中找到了线索: https://github.com/spring-projects/spring-hateoas-examples/blob/master/simplified/src/main/java/org/springframework/hateoas/examples/EmployeeController.java


此外,在教程页面的底部有一个指向完整项目的GitHub存储库的链接: https://github.com/spring-guides/tut-rest


在按照教程进行操作时,我还发现运行“LoadDatabase.java”时出现问题。为了解决这个问题,我必须让它实现 CommandLineRunner并将原始代码放入它的运行方法中:


@Component

public class LoadDatabase implements CommandLineRunner {


    private static final Logger log = LoggerFactory.getLogger(LoadDatabase.class);


    @Override

    public void run(String... args) throws Exception {


        employeeRepository.save(new Employee("Bilbo", "Baggins", "burglar"));

        employeeRepository.save(new Employee("Frodo", "Baggins", "thief"));


        employeeRepository.findAll().forEach(employee -> log.info("Preloaded " + employee));


        orderRepository.save(new Order("MacBook Pro", Status.COMPLETED));

        orderRepository.save(new Order("iPhone", Status.IN_PROGRESS));


        orderRepository.findAll().forEach(order -> {

            log.info("Preloaded " + order);

        });

    }


    @Autowired

    EmployeeRepository employeeRepository;

    @Autowired

    OrderRepository orderRepository;

}


查看完整回答
反对 回复 2023-04-13
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

这里linkTomethodOn是类的两个静态方法org.springframework.hateoas.mvc.ControllerLinkBuilder。您只需要在您的类中添加以下两个静态导入语句:

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;

或者只是导入ControllerLinkBuilder并将它们用作:

ControllerLinkBuilder.linkTo
ControllerLinkBuilder.methodOn


查看完整回答
反对 回复 2023-04-13
?
白板的微信

TA贡献1883条经验 获得超3个赞

我那样用过并且有效


import org.springframework.hateoas.EntityModel;

import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;



@GetMapping("/employees/{id}")

EntityModel<Employee> one(@PathVariable Long id) {

    Employee employee = repository.findById(id)

            .orElseThrow(() -> new EmployeeNotFoundException(id));

    return EntityModel.of(employee, //

            WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(EmployeeController.class).one(id)).withSelfRel(),

            WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(EmployeeController.class).all()).withRel("employees"));

}


查看完整回答
反对 回复 2023-04-13
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

由于以下事实:ControllerLinkBuilder 已弃用,如下所述: ControllerLinkBuilder java docs

应该改用 WebMvcLinkBuilder。

WebMvcLinkBuilder java文档

考虑使用进口:

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;


查看完整回答
反对 回复 2023-04-13
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

看起来你需要两个导入:

  • import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;>>对于方法论

  • import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;>> 用于实例化 WebMvcLinkBuilder


查看完整回答
反对 回复 2023-04-13
  • 5 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信