В настоящее время я изучаю интеграцию пружин и столкнулся с проблемой.
Код приведен ниже. Ответ - ошибка 500 для пустого запроса в конечной точке (ПОЛУЧИТЕ МЕТОД). Метод POST работает нормально, но я отправляю пустой json. Это что-то, связанное с классом PayloadType
(это пустой класс).
package org.nanotek.configuration.csv;
import org.nanotek.JsonMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway;
import org.springframework.integration.http.inbound.RequestMapping;
import org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler;
import org.springframework.messaging.MessageChannel;
import org.springframework.web.client.RestTemplate;
@Configuration
@EnableConfigurationProperties
public class InstrumentTypeIntegrationConfiguration {
@Value("${server.port}")
private String serverPort;
@Value("${csv-endpoint.instrument-type}${csv-endpoint.next}")
private String nexEndpoint;
public InstrumentTypeIntegrationConfiguration() {
}
@Bean
@Qualifier(value="baseRestTemplate")
RestTemplate baseRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
return restTemplate;
}
@Bean
HttpRequestExecutingMessageHandler csvNextMessageHandler
(@Autowired @Qualifier("baseRestTemplate") RestTemplate baseTemplate) {
String uriLocation = new StringBuilder()
.append("http://127.0.0.1")
.append(":")
.append(serverPort)
.append(nexEndpoint).toString();
return new HttpRequestExecutingMessageHandler(uriLocation , baseTemplate);
}
@Bean
RequestMapping mapping() {
RequestMapping mapping = new RequestMapping();
mapping.setMethods(new HttpMethod[] {HttpMethod.GET, HttpMethod.POST});
mapping.setConsumes(MediaType.APPLICATION_JSON_VALUE);
mapping.setProduces(MediaType.APPLICATION_JSON_VALUE);
mapping.setPathPatterns("/init");
return mapping;
}
@Bean
@Qualifier("startChannel")
MessageChannel startChannel() {
return new DirectChannel();
}
@Bean
@Qualifier("responseChannel")
MessageChannel responseChannel() {
return new DirectChannel();
}
@Bean
@Qualifier("httpGate")
public HttpRequestHandlingMessagingGateway httpGate() {
HttpRequestHandlingMessagingGateway gateway = new HttpRequestHandlingMessagingGateway(true);
gateway.setRequestMapping(mapping());
gateway.setRequestPayloadTypeClass(JsonMessage.class);
gateway.setReplyTimeout(10000);
gateway.setRequestChannel(startChannel());
gateway.setReplyChannel(responseChannel());
return gateway;
}
@Bean
public IntegrationFlow flowRequestHttp() {
return IntegrationFlows
.from(startChannel())
.channel(responseChannel())
.get();
}
}
Вот трассировка стека
{
"timestamp": 1583019522673,
"status": 500,
"error": "Internal Server Error",
"message": "Content-Type cannot contain wildcard type '*'",
"trace": "java.lang.IllegalArgumentException: Content-Type cannot contain wildcard type '*'\n\tat org.springframework.util.Assert.isTrue(Assert.java:118)\n\tat org.springframework.http.HttpHeaders.setContentType(HttpHeaders.java:949)\n\tat org.springframework.http.converter.FormHttpMessageConverter.writeForm(FormHttpMessageConverter.java:388)\n\tat org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:365)\n\tat org.springframework.integration.http.converter.MultipartAwareFormHttpMessageConverter.write(MultipartAwareFormHttpMessageConverter.java:133)\n\tat org.springframework.integration.http.converter.MultipartAwareFormHttpMessageConverter.write(MultipartAwareFormHttpMessageConverter.java:51)\n\tat org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.writeResponse(HttpRequestHandlingMessagingGateway.java:183)\n\tat org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:142)\n\tat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:53)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:634)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:834)\n",
"path": "/init"
}
Я использую почтальон для проверки конечной точки образец ниже коллекция здесь .
{
"name": "init_integration_request",
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "graphql",
"graphql": {
"query": "",
"variables": ""
}
},
"url": {
"raw": "http://localhost:8080/init?application/json",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"init"
],
"query": [
{
"key": "application/json",
"value": ""
}
]
}
},
"response": []
}