У меня есть сущности, предоставляемые приложением загрузки Spring, работающим на основе данных Spring REST.
@Entity
@Table(name = "joke")
@Data
public class Joke {
@Id
@Column(name = "joke_id")
private Long id;
@Column(name = "content")
private String content;
@JsonProperty("category")
@JoinColumn(name = "category_fk")
@ManyToOne(fetch = FetchType.EAGER)
private Category category;
}
и категория
@Entity
@Table(name = "category")
@Data
public class Category {
@Id
@Column(name = "category_id")
private int id;
@Column(name = "name")
private String name;
}
Он работает нормально и предоставляет формат HAL + Json. Я использую Traverson client
, который работает нормально:
Traverson client = new Traverson(URI.create("http://localhost:8080/api/"),
MediaTypes.HAL_JSON);
HashMap<String, Object> parameters = Maps.newHashMap();
parameters.put("size", "2");
PagedModel<JokesDTO> jokes = client
.follow("jokes")
.withTemplateParameters(parameters)
.toObject(new PagedModelType<JokesDTO>() {
});
return jokes;
, где JokesDTO:
@Builder(toBuilder = true)
@Value
@JsonDeserialize(builder = JokesDTO.JokesDTOBuilder.class)
@JsonInclude(Include.NON_NULL)
public class JokesDTO {
private String content;
@JsonPOJOBuilder(withPrefix = "")
@JsonIgnoreProperties(ignoreUnknown = true)
public static class JokesDTOBuilder {
}
}
Я новичок в HAL и HateOS, и я хотел бы достичь двух вещей (и вопрос - возможно ли это и как):
База по Traverson client
вызову, как получить категорию (или ссылку на категорию) за один вызов? Как продлить то, что я написал. И я не говорю о добавлении дополнительной аннотации @JsonProperty
к определению моего класса.
Можно ли открыть внутренний запрос из Spring data REST, чтобы я мог получить все данные одним вызовом, возможно ли это с помощью @RepositoryRestResource?