客户型号:
@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来管理 …
我正在尝试使用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.
这可能吗?