스프링 부트를 백엔드로, Angular를 프론트 엔드로, 그래프 지향 NoSQL 데이터베이스 인 Neo4j 데이터베이스로 응용 프로그램을 만들려고합니다. 내 문제는 NodeEntity에서 복잡한 데이터를 사용하는 방법을 모른다는 것입니다. 프로그래밍중인 응용 프로그램은 Angular (프론트 엔드)로 만든 앱이 스프링 부트로 만든 백엔드의 Rest API에 의해 데이터를 삽입하고 소비하는 마이크로 서비스 아키텍처를 기반으로합니다.이 서버는 데이터를 서버에 저장합니다 Neo4j 데이터베이스에서 인스턴스 실행 여기 내가하고있는 일의 예가 있습니다. application.properties파일
입니다.spring.data.neo4j.uri=bolt://localhost spring.data.neo4j.username=neo4j spring.data.neo4j.password=secret
이것은 도메인 모델의 예시 클래스입니다 :
@NodeEntity
public class Contact {
@Id
Long id;
String name;
String address;
String city;
String phone;
String email;
public Contact(String name, String address, String city, String phone, String email) {
this.name = name;
this.address = address;
this.city = city;
this.phone = phone;
this.email = email;
}
//get and set
}
여러분이 볼 수 있듯이 속성이 다른 간단한 클래스이지만 속성에 따라 속성, 도시, 거리, 국가, #, ...
저의 저장소는 다음과 같이 간단합니다 :
public interface ContactRepository extends Neo4jRepository<Contact,Long>{
Collection<Contact> findByName(String name);
@Override
void delete(Contact deleted);
}
ContactService 클래스는 ContactRepository 처리를 담당합니다
@Service
public class ContactService {
@Autowired
private final ContactRepository contactRepository;
public ContactService(ContactRepository contactRepository) {
this.contactRepository = contactRepository;
}
@Transactional(readOnly = true)
public Iterable<Contact> contact() {
return contactRepository.findAll();
}
@Transactional(readOnly = true)
public Contact show(Long id) {
return contactRepository.findById(id).get();
}
public Contact save(Contact contact) {
contactRepository.save(contact);
return contact;
}
public Contact update(Long id, Contact contact) {
Contact c = contactRepository.findById(id).get();
if (contact.getName() != null)
c.setName(contact.getName());
if (contact.getAddress() != null)
c.setAddress(contact.getAddress());
if (contact.getPhone() != null)
c.setPhone(contact.getPhone());
if (contact.getEmail() != null)
c.setEmail(contact.getEmail());
contactRepository.save(c);
return contact;
}
public String delete(Long id) {
Contact contact = contactRepository.findById(id).get() ;
contactRepository.delete(contact);
return "";
}
}
마지막으로 Rest API를 담당하는 컨트롤러
@RestController
public class ContactController {
@Autowired
private ContactService contactService;
@RequestMapping(method = RequestMethod.GET,value = "/contacts")
public Iterable<Contact> contact(){
return contactService.contact();
}
@RequestMapping(method = RequestMethod.POST,value = "/contacts")
public Contact save(@RequestBody Contact contact){
return contactService.save(contact);
}
@RequestMapping(method = RequestMethod.GET,value = "/contacts/{id}")
public Contact show(@PathVariable Long id){
return contactService.show(id);
}
@RequestMapping(method = RequestMethod.PUT,value = "/contacts/{id}")
public Contact update(@PathVariable Long id,@RequestBody Contact contact){
return contactService.update(id,contact);
}
@RequestMapping(method = RequestMethod.DELETE,value = "/contacts/{id}")
public String delete(@PathVariable Long id){
contactService.delete(id);
return "";
}
}
API 작동 방식을 테스트하기 위해 다음 명령이 사용됩니다
curl -i -H "Accept: application/json" localhost:8080/contacts
결과
HTTP/1.1 200 Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Mon, 05 Jul 2018 12:14:39 GMT []
데이터베이스에 새 연락처를 삽입하려면
curl -i -X POST -H "Content-Type: application/json" -d '{"name":"John Doe","address":"Jl. Cipaganti No.112","city":"Bandung","phone":"0811223112233","email":"[email protected]"}' localhost:8080/contacts
결과로 반환
HTTP/1.1 200 Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Tue, 06 Jul 2018 02:59:00 GMT {"id":"5a7919f4b9d4f13c2cb6f539","name":"John Doe","address":"Jl. Cipaganti No.112","city":"Bandung","phone":"0811223112233","email":"[email protected]"}
많은 튜토리얼을 보았지만 Rest API를 사용하는 방법만으로 데이터를 삽입하는 방법을 제공하지 않기 때문에 NodeEntity 클래스의 주소 속성을 변경하려고 할 때 문제가 발생합니다. 데이터베이스에서 노드 (NodeEntity)를 나타내는 클래스 인 주소 속성을 컨택 클래스에 추가하려면 어떻게해야합니까? 주소 속성이 도시, 거리, 국가, #, ...와 같은 여러 속성을 가진 클래스이기 때문에 curl 명령을 실행하여 API가 올바르게 작동 함을 어떻게 증명할 수 있습니까?
나를 도와 주셔서 감사합니다.
- 답변 # 1
관련 자료
- Spring Boot로 나머지 API를 소비하는 방법
- jQuery로 API를 나머지 값으로 게시
- delphi - FireMonkey에서 REST API를 사용하는 방법은 무엇입니까?
- java - like 및 in을 사용한 스프링 부트 JPA @Query
- 템플릿 HTML을 사용하는 스프링 부트 자바 메일
- java - Spring LDAP 인증 문제
- Java Rest API를 수정하는 방법? 404 계속 받기
- http - 나머지 API의 이벤트 스트림은 무엇이며 왜 필요한가요?
- scala - REST HTTP를 사용한 Akka 인증
- 노드 js를 사용하는 JIRA REST API의 405 오류
- javascript - 구글은 아약스와 방향 API를 매핑
- 스프링 데이터 레스트 테스트
- java - 봄 부팅 오류
- json - PHP에서 curl로 API 응답이 표시되지 않음
- concurrency - Spring Boot에서 동시성을 높이는 방법
- mysql - 스프링 부트에서 ST_CONTAINS를 사용하는 방법은 무엇입니까?
- REST API Get and Post 적절한 것을 선택해야 할 때
- Kubernetes REST API - kubernetes rest api - 무단
- java - 스프링 부트를 사용한 RSS 피드
- curl 변환 api를 파이썬으로 쉬십시오
- java : 스프링 부트에서 JMSContext 클래스를 찾을 수 없음
- java : 422 Unprocessable Entity에서 사용자 정의 응답 JSON 가져오기
- Spring Boot에서 txt java StringIndexOutOfBound 파일 읽기 오류
- java : kubernetes의 마운트된 볼륨에서 구성 데이터를 스프링 부트 애플리케이션으로 로드할 수 없음
- MongoDB/Java Spring Boot에서 월별 카운트 얻기
- java : @Service의 메소드에서 예외를 던지지 않음
- java : 동일한 Namespace 및 localPart를 사용하여 두 끝점을 정의할 때 Spring WS 오류
- Java: 재귀 메서드 호출 및 루프에서 나가기
- java : 최대 절전 모드의 Longvarchar
- java : Rest 서비스에서 데이터를 가져와 파일에 저장하는 방법은 무엇입니까?
위 노드와 유사한 주소 노드를 다음과 같이 생성합니다