缺少 linkTo 和 methodOn 声明 Spring HATEOAS STS

Era*_*cer 5 java eclipse maven spring-hateoas spring-boot

我正在关注 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")
 );
}
Run Code Online (Sandbox Code Playgroud)

Spring HATEOAS 依赖也在这里:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  • 更新 Maven 项目

Mar*_*ski 12

我下面的教程相同,并与方法“在同样的问题就来了linkTo ”和“ methodOn ”。

似乎导入应该来自:

import static org.springframework.hateoas.server.mvc.ControllerLinkBuilder.*;
Run Code Online (Sandbox Code Playgroud)

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

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
Run Code Online (Sandbox Code Playgroud)

我在这个类中找到了线索: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并将原始代码放在它的run方法中:

@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;
}
Run Code Online (Sandbox Code Playgroud)


Deb*_*kia 8

这里linkTomethodOnorg.springframework.hateoas.mvc.ControllerLinkBuilder类的两个静态方法。您只需将以下两个静态导入语句添加到您的类中:

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
Run Code Online (Sandbox Code Playgroud)

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

ControllerLinkBuilder.linkTo
ControllerLinkBuilder.methodOn
Run Code Online (Sandbox Code Playgroud)

  • 本教程既没有提到“import static”也没有提到“ControllerLinkBuilder”本身。这是教程文档问题还是我们遗漏了其他内容? (2认同)
  • 我认为教程至少应该提到包含这些方法的类名 - 否则新用户将如何找到类名。 (2认同)