programing

HATEOAS 메서드를 찾을 수 없습니다.

stoneblock 2023. 6. 28. 21:16

HATEOAS 메서드를 찾을 수 없습니다.

수것 같습니다. 예를 들어 HATEOAS 메소드를 찾을 수 없습니다.linkTo?내가 뭘 빼놓았나요?

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>

계정 컨트롤러.java

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);
    }
}

HATEOAS v1.0 이상(Spring boot > = 2.2.0)을 사용하는 경우 클래스 이름이 변경되었음을 유의하십시오.특히 아래 클래스의 이름이 변경되었습니다.

  • ResourceSupport으로 되었습니다.RepresentationModel
  • Resource으로 되었습니다.EntityModel
  • Resources으로 되었습니다.CollectionModel
  • PagedResources으로 되었습니다.PagedModel
  • ResourceAssembler으로 되었습니다.RepresentationModelAssembler

자세한 내용은 공식 문서를 참조하십시오.

Spring boot starter를 사용할 때, 아래의 의존성은 HATOAS를 포함하기에 충분합니다.

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

이 정보가 나처럼 몇 시간 동안 검색한 사람이 왜 그런지 찾는 데 도움이 되기를 바랍니다.Resource클래스를 확인하지 못했습니다.

이 누락된 것 .spring-hateoas의존.

먼저 pom.xml에 추가합니다.

<dependency>
    <groupId>org.springframework.hateoas</groupId>
    <artifactId>spring-hateoas</artifactId>
    <version>0.15.0.RELEASE</version>
</dependency>

그런 다음 이 정적 가져오기를 추가하면 코드가 컴파일됩니다.

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

Eclipse(버전: Oxygen.3a Release(4.7.3a))에서 HATOAS를 사용하는 경우 클래스 이름이 변경되었습니다.

Resource changed to EntityModel
Resources changed to CollectionModel

자세한 내용은 아래 공식 문서에서 확인할 수 있습니다. 링크 ->

https://docs.spring.io/spring-hateoas/docs/current/reference/html/

Spring 부트 스타터를 사용하는 경우 HATEOAS를 포함하려면 아래의 종속성을 사용해야 합니다.

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

데모 코드:

EntityModel<Users> resource = new EntityModel<Users>(user);
        ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
        resource.add(linkTo.withRel("all-users"));

참고: 가져와야 합니다.

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

이 정보가 이유를 찾는 데 도움이 되기를 바랍니다.Resource수업이 해결되지 않았습니다!!

    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;
    }

pom.xml에 아래의 의존성을 추가하면 문제를 해결할 수 있습니다.

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

위의 내용이 효과가 없다면 이전 버전의 헤테오에서 쉬운 해결책을 얻을 수 있습니다.

Hateoas의 새로운 버전이 완전히 변경되었기 때문에 아래 링크를 통해 도움을 받을 수 있습니다.https://docs.spring.io/spring-hateoas/docs/current/reference/html/

Hateoas의 방법들의 몇 가지 주요한 변화들을 언급하고 있습니다.

ResourceSupport is now RepresentationModel

Resource is now EntityModel

Resources is now CollectionModel

PagedResources is now PagedModel

LinkDiscoverer API가 클라이언트 패키지로 이동되었습니다.

LinkBuilder 및 EntityLinks API가 서버 패키지로 이동되었습니다.

ControllerLinkBuilder가 server.mvc로 이동되었으며 WebMvcLinkBuilder로 대체되는 것이 권장되지 않습니다.

RelProvider의 이름이 LinkRelationProvider로 변경되었으며 Strings 대신 LinkRelation 인스턴스를 반환합니다.

VndError가 미디어 유형으로 이동되었습니다.vnderror 패키지

최근 릴리스(2.2.0 또는 >)에서 명명법이 변경되었습니다. 문서 참조

새로운 사람이 필요로 할 경우를 대비해 이걸 여기에 두겠습니다.

ControllerLinkBuilder이 사용되지 않으므로 를 사용해야 합니다.WebMvcLinkBuilder대신 (https://docs.spring.io/spring-hateoas/docs/1.0.0.M1/apidocs/org/springframework/hateoas/server/mvc/ControllerLinkBuilder.html) 을 확인하십시오.

그래서 대신에 만약:

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

사용:

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

이 문제는 제 경우 두 개의 hateoas jar가 있는데 하나는 리소스 인터페이스를 가지고 있고 다른 하나는 groupId와 arrifactId가 같은 구현을 가지고 있기 때문에 발생했습니다.이 문제를 해결하려면 --> 4.*를 사용하는 경우 STS를 3.* 스프링 부트를 사용하는 경우 아래 종속성을 추가하십시오.

     <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>

이 종속성을 추가한 후 pom.xml이 있는 명령 프롬프트에서 아래 명령을 실행합니다.

  1. mvn 새로 설치 패키지
  2. mvn 일식:개요

이 단계를 통해 문제가 해결되었습니다.

일부에게는 도움이 될 수 있습니다. 여기서 다루지 않은 한 가지 사항이 있으며 몇 가지 의견이 이를 요청합니다.

Cannot resolve symbol 'hal'
Cannot resolve symbol 'Jackson2HalModule'

hal 모듈은 지금 미디어 아래에 있습니다.그렇게

org.springframework.hateoas.hal.Jackson2HalModule

이제 로 대체됨

org.springframework.hateoas.mediatype.hal.Jackson2HalModule

아래 가져오기는 필수 항목입니다.

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

다음에서 정적 가져오기WebMvcLinkBuilder모든 수단을 다하여

다른 사람들이 말했듯이, hateoas는 많은 변화가 있었습니다.org.springframework에서 아무것도 가져올 수 없기 때문에 EntityModel 등으로 이름을 제대로 변경했는데도 여전히 동일한 문제에 직면했습니다.오아시스를 싫어함

나는 IntelliJ IDEA와 함께 maven을 사용하고 있었고 내 pom.xml, -> maven, -> reload 프로젝트를 마우스 오른쪽 버튼으로 클릭해야 했습니다.그러면 제가 증오에서 물건을 제대로 수입할 수 있게 해줍니다.

이것이 누군가에게 도움이 되기를 바랍니다!

언급URL : https://stackoverflow.com/questions/25352764/hateoas-methods-not-found