小编Dai*_*hiG的帖子

出现 InvalidDataAccessApiUsageException:使用 ExampleMatcher 时,根 %s 中的路径“%s”不得跨越循环属性引用

客户型号:

@Entity
public class Client {
    @Id
    private Integer id;

    @OneToOne(mappedBy = "client", fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.REMOVE})
    private ClientLegalTerm clientLegalTerm;

    ...//Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)

客户法律条款模型:

@Entity
public class ClientLegalTerm {
    @Id
    private Integer id;

    @OneToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(foreignKey = @ForeignKey(name = "FK_client_legal_term_client_id"))
    private Client client;

    ...//Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)

我的新实体模型:

@Entity
public class MyNewEntity {
    @Id
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    private Client client;

    ...//Getters and Setters

Run Code Online (Sandbox Code Playgroud)

我正在使用QueryByExampleJpaRepository来管理 …

java spring-data-jpa

6
推荐指数
1
解决办法
930
查看次数

block()/ blockFirst()/ blockLast()在调用bodyToMono后阻塞错误AFTER exchange()

我正在尝试使用Webflux将生成的文件流式传输到另一个位置,但是,如果文件的生成遇到错误,则api会返回成功,但是DTO会在生成文件而不是文件本身时详细说明错误.这是使用一个非常古老和设计不佳的api所以请原谅使用post和api设计.

来自api调用(exchange())的响应是ClientResponse.从这里我可以使用bodyToMono转换为ByteArrayResource,它可以流式传输到文件,或者,如果创建文件时出错,那么我也可以使用bodyToMono转换为DTO.但是,我似乎无法做任何事情或取决于ClientResponse标题的内容.

在运行时我得到一个IllegalStateException引起的

block()/ blockFirst()/ blockLast()是阻塞,在线程reactor-http-client-epoll-12中不支持

我认为我的问题是我不能在同一个函数链中两次调用block().

我的代码片段是这样的:

webClient.post()
        .uri(uriBuilder -> uriBuilder.path("/file/")
                                      .queryParams(params).build())
        .exchange()
        .doOnSuccess(cr -> {
                if (MediaType.APPLICATION_JSON_UTF8.equals(cr.headers().contentType().get())) {
                    NoPayloadResponseDto dto = cr.bodyToMono(NoPayloadResponseDto.class).block();
                    createErrorFile(dto);
                }
                else {
                    ByteArrayResource bAr = cr.bodyToMono(ByteArrayResource.class).block();
                    createSpreadsheet(bAr);
                }
            }
        )
        .block();
Run Code Online (Sandbox Code Playgroud)

基本上我想根据标头中定义的MediaType以不同方式处理ClientResponse.

这可能吗?

java reactive-programming project-reactor spring-webflux

3
推荐指数
3
解决办法
8684
查看次数