Spring boot 未找到HATEOAS方法

Spring boot 未找到HATEOAS方法,spring-boot,spring-hateoas,Spring Boot,Spring Hateoas,我的控制器似乎找不到像“linkTo”这样的HATEOAS方法 我错过什么了吗 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P

我的控制器似乎找不到像“linkTo”这样的HATEOAS方法

我错过什么了吗

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>provider</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.5.RELEASE</version>
    </parent>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Security -->
        <!-- Auto configured, remove dependencies to disable. -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        </dependency>

        <!-- OAuth 2.0 -->
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test-mvc</artifactId>
            <version>1.0.0.M2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!-- Spring MongoDB -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
        </dependency>

        <!-- Spring REST MVC -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-webmvc</artifactId>
        </dependency>

        <!-- Dozer: DTO/Entity Mapper -->
        <dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>

    </dependencies>

    <properties>
        <start-class>com.provider.core.Application</start-class>
    </properties>

    <build>
        <plugins>
            <plugin> 
                <artifactId>maven-compiler-plugin</artifactId> 
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

4.0.0
org.springframework
供应商
0.1.0
org.springframework.boot
spring启动程序父级
1.1.5.1发布
org.springframework.boot
SpringBootStarterWeb
org.springframework.security
spring安全网
org.springframework.security
spring安全配置
org.springframework.security.oauth
spring-security-oauth2
2.0.1.1发布
org.springframework
弹簧试验
org.springframework
弹簧试验
1.0.0.2平方米
测试
com.fasterxml.jackson.core
杰克逊数据绑定
org.springframework.data
spring数据mongodb
org.springframework.data
spring数据rest webmvc
net.sf.推土机
推土机
5.3.2
org.springframework.boot
弹簧起动试验
乔达时间
乔达时间
com.provider.core.Application
maven编译器插件
org.springframework.boot
springbootmaven插件
春季快照
http://repo.spring.io/libs-snapshot
真的
春季快照
http://repo.spring.io/libs-snapshot
真的
控制器

package com.provider.core;

import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.provider.account.Account;
import com.provider.account.AccountDTO;

@Controller
public class AccountController
{
    private static final Logger logger = LoggerFactory.getLogger(AccountController.class);
    @Autowired private AccountRepository repo;

    @RequestMapping(value = "account", method = RequestMethod.POST)
    public @ResponseBody HttpEntity<AccountDTO> createAccount(@RequestBody AccountDTO accountDto) {
        logger.info("Start createAccount()");
        Mapper mapper = new DozerBeanMapper();
        Account account = mapper.map(accountDto, Account.class);
        Account savedAccount = repo.save(account);
        AccountDTO savedAccountDto = mapper.map(savedAccount, AccountDTO.class);

        // DOES NOT COMPILE "linkto" not defined.
        savedAccountDto.add(linkTo(AccountController.class).slash(savedAccountDto.getId()).withSelfRel());

        return new ResponseEntity<AccountDTO>(savedAccountDto, HttpStatus.OK);
    }
}
package com.provider.core;
导入org.dozer.DozerBeanMapper;
导入org.dozer.Mapper;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.http.HttpEntity;
导入org.springframework.http.HttpStatus;
导入org.springframework.http.ResponseEntity;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.ResponseBody;
导入com.provider.account.account;
导入com.provider.account.AccountDTO;
@控制器
公共类帐户控制器
{
私有静态最终记录器Logger=LoggerFactory.getLogger(AccountController.class);
@自动连线私人帐户存储库回购;
@RequestMapping(value=“account”,method=RequestMethod.POST)
public@ResponseBody HttpEntity createAccount(@RequestBody AccountDTO AccountDTO){
logger.info(“启动CreateCount()”;
映射器映射器=新的DozerBeanMapper();
Account Account=mapper.map(accountDto,Account.class);
账户savedAccount=repo.save(账户);
AccountDTO savedAccountDto=mapper.map(savedAccount,AccountDTO.class);
//不编译未定义的“链接到”。
savedAccountDto.add(linkTo(AccountController.class).slash(savedAccountDto.getId()).withSelfRel());
返回新的响应状态(savedAccountDto,HttpStatus.OK);
}
}

看起来您的POM缺少
spring hateoas
依赖项

因此,首先将其添加到pom.xml中:


org.springframework.hateoas
春风
0.15.0.0发布
然后,您可以添加此静态导入,您的代码应编译:

导入静态org.springframework.hateoas.mvc.ControllerLinkBuilder*

在我的案例中出现此问题是因为有两个hateoas JAR,一个具有资源接口,另一个具有相同groupId和arifactId的实现。 要解决此问题--> 如果您使用4.*到3,请将STS降级* 如果使用spring boot,请添加以下依赖项

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>

org.springframework.boot
弹簧靴自动配置
org.springframework.boot
弹簧靴启动器hateoas
添加此依赖项后,在pom.xml所在的命令提示符下运行以下命令

  • mvn清洁安装包
  • mvn eclipse:eclipse

  • 这些步骤为我解决了这个问题。

    最近的版本(2.2.0或>)中有一些术语更改。如果您使用的是HATEOAS v1.0及以上版本(Spring boot>=2.2.0),请参阅,注意类名已更改。值得注意的是,以下类别已重命名:

    • ResourceSupport
      更改为
      RepresentationModel
    • Resource
      更改为
      EntityModel
    • Resources
      更改为
      CollectionModel
    • PagedResources
      更改为
      PagedModel
    • ResourceAssembler
      更改为
      RepresentationModelAssembler
    官方文件中提供了更多信息

    使用Spring boot starter时,以下依赖项足以包括HATEOAS:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
     </dependency>
    
    
    org.springframework.boot
    弹簧靴启动器hateoas
    

    希望这些信息能帮助像我这样搜索了数小时的人找到
    资源
    类未得到解决的原因。

    如果您在eclipse中使用HATEOAS(版本:Oxygen.3a Release(4.7.3a)),请注意类名已更改

    Resource changed to EntityModel
    Resources changed to CollectionModel
    
    更多信息请参见下面的官方文档链接->

    使用Spring boot starter时,必须使用以下依赖项来包含HATEOAS:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
     </dependency>
    
    希望这个消息
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    
    ResourceSupport is now RepresentationModel
    
    Resource is now EntityModel
    
    Resources is now CollectionModel
    
    PagedResources is now PagedModel
    
    import static org.springframework.hateoas.server.mvc.ControllerLinkBuilder.*;
    
    import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
    
        Add following dependency :-
    
        <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-hateoas</artifactId>
         <version>2.4.0</version>
        </dependency>
        
        Follow Sample Code :-
        import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
       
        @GetMapping(path = "/users/{id}")
        public EntityModel<User> getUserInfo(@PathVariable int id) {
            User user = userDao.getUser(id);
            
            EntityModel<User> entityModel = EntityModel.of(user);
            Link link = WebMvcLinkBuilder.linkTo(methodOn(this.getClass()).getUserList()).withRel("user-list");
            entityModel.add(link);
            
            if(user == null) {
                throw new UserNotFoundException("User not found with id : "+id);
            }
            return entityModel;
        }