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이 있는 명령 프롬프트에서 아래 명령을 실행합니다.
- mvn 새로 설치 패키지
- 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
'programing' 카테고리의 다른 글
추가되지 않은 특정 행 인덱스에서 데이터 프레임에 새 행을 추가하시겠습니까? (0) | 2023.06.28 |
---|---|
mysqdump와 일관된 InnoDB 덤프 (0) | 2023.06.28 |
체크 제약 조건이 0.00보다 큰 DECTIVE 열에 값을 삽입하면 SQL 오류 1292 잘못된 DOUBLE 값이 표시됩니다. (0) | 2023.06.23 |
Spring boot "spring-boot-starter-mail"을 통해 전자 메일 보내기 (0) | 2023.06.23 |
막대 그래프에서 Y축 수치를 백분율로 변경하려면 어떻게 해야 합니까? (0) | 2023.06.23 |