我有一条只有一个字段的 Java 记录:
public record AggregateId(UUID id) {}
Run Code Online (Sandbox Code Playgroud)
以及一个带有该AggregateId
字段的类(为了可读性而删除了其他字段)
public class Aggregate {
public final AggregateId aggregateId;
@JsonCreator
public Aggregate(
@JsonProperty("aggregateId") AggregateId aggregateId
) {
this.aggregateId = aggregateId;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的实现使用给定的示例序列化和反序列化 JSON:
ObjectMapper objectMapper = new ObjectMapper();
String content = """
{
"aggregateId": {
"id": "3f61aede-83dd-4049-a6ff-337887b6b807"
}
}
""";
Aggregate aggregate = objectMapper.readValue(content, Aggregate.class);
System.out.println(objectMapper.writeValueAsString(aggregate));
Run Code Online (Sandbox Code Playgroud)
我如何更改 Jackson 配置以替换 JSON:
{
"aggregateId": "3f61aede-83dd-4049-a6ff-337887b6b807"
}
Run Code Online (Sandbox Code Playgroud)
不放弃一个单独的类AggregateId
并通过字段进行访问,没有吸气剂?
我尝试了@JsonUnwrapper
注释,但这导致了抛出
Exception in thread "X" com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Invalid type definition for …
Run Code Online (Sandbox Code Playgroud) 我有实体User
以及Conversation
它们@ManyToMany
之间的关系:
@Entity
@Table(name="USER")
public class User {
...
...
@ManyToMany
@JoinTable(name="USER_CONVERSATION",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "conversation_id"))
Set<Conversation> conversations = new HashSet<>();
...
...
}
Run Code Online (Sandbox Code Playgroud)
@Entity
@Table(name="CONVERSATION")
public class Conversation {
...
...
@ManyToMany(mappedBy = "conversations", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
Set<User> users = new HashSet<>();
...
...
}
Run Code Online (Sandbox Code Playgroud)
我想接收具有给定用户列表的所有对话。我试过这样的事情:
public interface ConversationRepository extends JpaRepository<Conversation, Long> {
List<Conversation> findAllConversationsByUsers(List<User> users);
Run Code Online (Sandbox Code Playgroud)
但我收到一条错误消息:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'conversationRepository': Invocation …
Run Code Online (Sandbox Code Playgroud)