小编M. *_*dek的帖子

Jackson 中的扁平 JSON,用于具有一个字段的类/记录/值对象

我有一条只有一个字段的 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)

java jackson deserialization jackson-databind

5
推荐指数
1
解决办法
2831
查看次数

Spring Data JPA 中关系@ManyToMany 的查询方法

我有实体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)

java spring spring-data-jpa

2
推荐指数
1
解决办法
1808
查看次数