Spring-mvc로 간단한 사전 RESTful API를 개발 중이다. 관련 엔티티 위의 코드를 기반으로외래 키를 사용하여 개체를 저장하는 전문적/표준 방법은 무엇입니까?
public class Word {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String word;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="LANGUAGE_ID", insertable=false, updatable=false)
private Language language;
}
가 Language
입니다 : 두 개의 관련 기관이 있습니다.
문제 : POST 요청으로 Word 엔터티에 CREATE 작업을 구현하고 싶습니다. 구현은 어렵지 않지만 POST 요청 URL 및 JSON 요청 본문과 관련하여 최소한 두 가지 솔루션 후보가있었습니다. 즉, JSON 본문 요청을 직접 삽입합니다. : 직접 삽입합니다. json으로 몸은 중첩 된 JSON 개체를 포함 - 언어,
{id:1, word:"hello", Language: {id:1, language:"English"}}
는 참조 같은 : Spring: Save object with foreign keys with a POST request가
해결책 후보 II : POST 요청의 URL을 통해 참조 된 언어 ID를 얻을 말을
같은 이와 같이POST http://localhost:8080/rest/language/1/words
을 더 Language
기준 A를 없다 모든 JSON POST 요청 본문.
참조 : https://www.youtube.com/watch?v=_Jnu_jHfQbM
나는이 두 질문 :
질문 1 :이 두 솔루션 후보 중에서, 더 나은 하나, 또는 말 전문 표준 솔루션입니다? 아니면 다른 해결책이 있습니까?
질문 2는 : 주어진 솔루션 후보 모두로, 어떤 경우에 우리는 해당 controller
클래스에 적어도 참조 Language
POJO를 검색 할 필요가있다. 그러나 OO 설계 원칙의 관점에서 보았을 때,이 방법은 컨트롤러와 밀접하게 결합 된 것으로 보이므로 컨트롤러에서보다는이 검색 동작을 분리해야한다고 생각하고 있습니까? 예를 들어 service
계층에 있습니다. 그러나 이것은 전문적인 방법입니까? 우리는 해당 DTO가 있어야합니까?
먼저 조언 해 주셔서 감사합니다. : "엔티티에 대한 별도의 모델 클래스 생성"이란 무엇을 의미합니까? 나는 언어와 단어라는 두 개의 분리 된 실체를 가지고있었습니다. 아마 DTO가 있어야할까요? 당신이 준 TestModel이 DTO 일까? – Rui
예, 컨트롤러에서 엔티티를 사용하는 것을 좋아하지 않습니다. 그래서 필요한 엔티티의 값을 보유하는 별도의 클래스를 만듭니다. –