我已经重构了我的代码以使用 spring webflux 但现在@Valid停止工作。它不验证请求正文。
@PostMapping(value = "/getContactInfo",produces = "application/json",consumes = "application/json")
public Flux<UserContactsModel> getUserContacts(@Valid @RequestBody Mono<LoginModel> loginDetail) {
loginDetail.log();
return contactInfoService
.getUserContacts(loginDetailApiMapper.loginModelMonoToLoginBoMono(loginDetail))
.flatMapIterable(
userContactsBO -> contactInfoMapper.userContactBoToModelList(userContactsBO));
}
Run Code Online (Sandbox Code Playgroud)
我收到 200 OK 代替了我从控制器建议返回的 Bad request。
编辑1:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
public class LoginModel implements Serializable {
private String clientId;
@Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Login ID is invalid")
@NotNull
private String loginId;
}
Run Code Online (Sandbox Code Playgroud)
更新1: 像这样更改代码并在类级别添加@Validated之后
@RestController
@Validated
public class ContactInfoController implements ContactInfoApi {
public Flux<UserContactsModel> getUserContacts(@RequestBody Mono<@Valid LoginModel> loginDetail) { …Run Code Online (Sandbox Code Playgroud) 我计划使用 spring webflux 将我的微服务从阻塞实现重构为反应式 API。我有几个疑问:
1)是否选择基于注解的控制器或功能路由器?2) 是否支持反应式假装客户端?
请帮忙。
spring microservices spring-cloud spring-cloud-feign spring-webflux
是否可以将 Ribbon 和 Eureka 服务发现与 spring webflux webclient 一起使用?
我尝试了此代码,但在集成测试期间出现错误。
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.IllegalArgumentException: URI 不是绝对的:/auth-service/auth-service/validate-manager-client-access
@Bean
@LoadBalanced
public WebClient loadBalancedWebClient() {
return WebClient.create(baseURL);
}
@Override
public Mono<Boolean> validateManagerClientAccess(Mono<LoginDTO> loginDTOMono) {
return webClient
.post()
.uri(validateManagerURL)
.body(loginDTOMono, LoginDTO.class)
.retrieve()
.bodyToMono(Boolean.class);
}
# Remote Services Configuration
remote:
auth-service:
service-id: auth-service
path:
validate-manager-client-access: /auth-service/validate-manager-client-access
Run Code Online (Sandbox Code Playgroud) spring spring-boot microservices spring-cloud-netflix reactive
我在spring中使用swagger code-gen从swagger.yaml文件生成了代码.
现在我已经为我的API更新了swagger.yaml文件,并添加了更多的HTTP操作.
是否可以自动更新先前生成的现有代码而无需手动合并?
我有一个垫子表,带有粘性标题和页面的垂直滚动。它工作正常,直到我动态添加更多列并出现水平滚动条。
粘性标题停止工作。
有什么办法让它发挥作用吗?
请看例子:
我在 web 客户端收到 java.lang.OutOfMemoryError: Direct buffer memory error。
批处理作业每天运行。它失败了两次,然后在第三次尝试中通过了。
at org.springframework.retry.support.RetryTemplate.rethrow(RetryTemplate.java:532) ~[spring-retry-1.2.5.RELEASE.jar:na]
Caused by: java.lang.OutOfMemoryError: Direct buffer memory
at reactor.netty.http.client.HttpClientDoOnError$OnErrorTcpClient.connect(HttpClientDoOnError.java:242) ~[reactor-netty-0.9.11.RELEASE.jar:0.9.11.RELEASE]
Run Code Online (Sandbox Code Playgroud)
我在日志中找到的 JVM 内存配置。它在云代工厂中运行。
JVM Memory Configuration: -Xmx342549K -Xss1M -XX:ReservedCodeCacheSize=240M -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=194026K
Run Code Online (Sandbox Code Playgroud)
失败的代码:
@Retryable(maxAttemptsExpression = "#{${remote.retry.maxAttempts}}", backoff = @Backoff(delayExpression = "#{${remote.retry.delay}}"))
public Optional<JobStatusResponseDTO> getStatus(String jobNumber, String accountNumber) {
return broadridgeClient.getStatus(accountNumber, jobNumber);
}
@CircuitBreaker(maxAttemptsExpression = "#{${remote.circuitBreaker.maxAttempts}}",
openTimeoutExpression = "#{${remote.circuitBreaker.openTimeout}}", resetTimeoutExpression = "#{${remote.circuitBreaker.resetTimeout}}")
public Optional<JobStatusResponseDTO> getStatus(String account, String jobNumber) {
JobStatusRequestDTO request = new JobStatusRequestDTO();
request.setAccount(account);
request.setJobNumber(jobNumber);
JobStatusResponseDTO jobStatus;
jobStatus = client.post() …Run Code Online (Sandbox Code Playgroud) 我正在使用openCSV的CsvToBean类。豆有日期字段。
@CsvDate(value = "yyyy-MM-dd")
@CsvBindByPosition(position = 8)
private Date startDate;
Run Code Online (Sandbox Code Playgroud)
我正在通过传递值“ 2018-25-02 ” 进行负面测试,但它将转换为格林尼治标准时间2020年1月2日星期四00:00:00而不引发任何问题。
我遇到了这个基本问题,其中将开关大小写与字符串一起使用。
在案例之间不使用Break语句,但是为什么即使不匹配case字符串也要在所有案例中使用break语句?
所以我很好奇 为什么输出是3而不是1?
public static void main(String [] args)
{
int wd=0;
String days[]={"sun","mon","wed","sat"};
for(String s:days)
{
switch (s)
{
case "sat":
case "sun":
wd-=1;
break;
case "mon":
wd++;
case "wed":
wd+=2;
}
}
System.out.println(wd);
}
Run Code Online (Sandbox Code Playgroud) 从 2.7.5 升级到 Spring Boot 3.0.4 webflux 后,我收到“415 UNSUPPORTED_MEDIA_TYPE”。服务正在接受并返回 xml 内容。之前工作得很好。
@PostMapping(
value = "/sides/Request",
consumes = MediaType.APPLICATION_XML_VALUE,
produces = MediaType.APPLICATION_XML_VALUE)
public Mono<ResponseModel> getSsi(@RequestBody Mono<RequestModel> requestModelMono) {...
}
Run Code Online (Sandbox Code Playgroud)
聚甲醛:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud) java ×5
spring-boot ×5
spring ×4
reactive ×2
angular ×1
angular-cdk ×1
arrays ×1
break ×1
date ×1
html ×1
opencsv ×1
spring-cloud ×1
swagger-ui ×1
validation ×1