[SPRING] 봄 통합 - HTTP 아웃 바운드 게이트웨이와 POST 매개 변수를 전송하는 방법
SPRING봄 통합 - HTTP 아웃 바운드 게이트웨이와 POST 매개 변수를 전송하는 방법
나는 봄 통합과 HTTP 아웃 바운드 게이트웨이를 사용하여 정말 간단 HTTP의 POST 예를 함께 넣어 노력하고있어. 내가 곱슬 곱슬와 마찬가지로, 일부 POST 매개 변수와 HTTP의 POST 메시지를 보낼 수 있어야합니다 :
$ curl -d 'fName=Fred&sName=Bloggs' http://localhost
나는 인터페이스 메소드의 인수로 간단한 문자열을 보낼 경우합니다 (POST 매개 변수없이) 작업을 얻을 수 있지만, 나는 POJO의 각 속성이 POST 매개 변수가되는 POJO를 보내야합니다.
나는 다음과 같은 SI의 설정을 가지고 :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-http="http://www.springframework.org/schema/integration/http"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd">
<int:gateway id="requestGateway"
service-interface="RequestGateway"
default-request-channel="requestChannel"/>
<int:channel id="requestChannel"/>
<int-http:outbound-gateway request-channel="requestChannel"
url="http://localhost"
http-method="POST"
expected-response-type="java.lang.String"/>
</beans>
내 RequestGateway 인터페이스는 다음과 같습니다 :
public interface RequestGateway {
String echo(Pojo request);
}
내 뽀조 클래스는 다음과 같습니다 :
public class Pojo {
private String fName;
private String sName;
public Pojo(String fName, String sName) {
this.fName = fName;
this.sName = sName;
}
.... getters and setters
}
그리고 내 클래스는이 같은 모습을 모두 킥오프 :
public class HttpClientDemo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/si-email-context.xml");
RequestGateway requestGateway = context.getBean("requestGateway", RequestGateway.class);
Pojo pojo = new Pojo("Fred", "Bloggs");
String reply = requestGateway.echo(pojo);
System.out.println("Replied with: " + reply);
}
}
나는 위 실행하면, 내가 얻을 :
org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [Pojo] and content type [application/x-java-serialized-object]
나는 이것에 대한 많은 검색 좀했지만, 아웃 바운드 게이트웨이와 HTTP의 POST 매개 변수를 전송의 예를 찾을 수 없습니다 (I는 HTTP 헤더를 설정하는 방법에 대한 많이 찾을 수 있지만, 내가 여기 할 노력하고있어이 아니다) HTTP-아웃 바운드에 게시 요청 매개 변수를 전달하는 방법을하지만 영업 이익은 내가하지 오전 자신의 POJO의 JSON 표현을 보내려고되면서 약간 다른 사용 사례 및 응답 회담입니다 : 내가 발견했던 유일한 것은 봄 통합했다 헤더를 설정에 대한 매개 변수를 게시하지.
이것에 어떤 도움을 아주 많이 주시면 감사하겠습니다; 감사 나단
해결법
-
==============================
1.콘텐츠 유형에 관한 @ jra077에서 포인터 덕분에,이 내가 그것을 해결하는 방법입니다.
콘텐츠 유형에 관한 @ jra077에서 포인터 덕분에,이 내가 그것을 해결하는 방법입니다.
내 SI의 설정은 이제 다음과 같습니다 - 중요한 비트가 Content-Type 헤더를 추가했다 :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-http="http://www.springframework.org/schema/integration/http" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd"> <int:gateway id="requestGateway" service-interface="RequestGateway" default-request-channel="requestChannel"> <int:method name="sendConfirmationEmail"> <int:header name="Content-Type" value="application/x-www-form-urlencoded"/> </int:method> </int:gateway> <int:channel id="requestChannel"/> <int-http:outbound-gateway request-channel="requestChannel" url="http://localhost" http-method="POST" expected-response-type="java.lang.String"/> </beans>
그리고 나는 그것이 오히려 POJO 이상의 인수가있어 같은 맵을 내 인터페이스를 변경 :
public interface RequestGateway { String echo(Map<String, String> request); }
POJO와 자체는 이전과 남아있다; 이지도를 생성하고 전달하도록하고 서비스를 호출하는 클래스가 변경됩니다 :
public class HttpClientDemo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("/si-email-context.xml"); RequestGateway requestGateway = context.getBean("requestGateway", RequestGateway.class); Pojo pojo = new Pojo("Fred", "Bloggs"); Map<String, String> requestMap = new HashMap<String, String>(); requestMap.put("fName", pojo.getFName()); requestMap.put("sName", pojo.getSName()); String reply = requestGateway.echo(requestMap); System.out.println("Replied with: " + reply); } }
나는지도로 POJO를 변환하는 몇 가지 더 우아한 방법이 확신하지만, 당분간이 내 질문에 대답을 제공합니다.
당신이 응용 프로그램에 콘텐츠 형식 / x-www-form-urlencoded를 설정할 필요가 HTTP 아웃 바운드 게이트웨이와 POST 매개 변수를 보내고 당신은 키의지도를 전달해야하기 / 값 쌍.
from https://stackoverflow.com/questions/30500397/spring-integration-how-to-send-post-parameters-with-http-outbound-gateway by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 예기치 않은 토큰 (START_OBJECT), 예상 VALUE_STRING : 필요 JSON 문자열 (java.lang.Object 상위의 하위 유형에 대한) 유형 ID를 포함합니다 (0) | 2019.10.04 |
---|---|
[SPRING] 어떻게 AWS ElasticBeanstalk와의 Nginx에 OAuth2를 사용 나의 봄 부팅 응용 프로그램에 SSL을 강요하는 걸까? (0) | 2019.10.04 |
[SPRING] 중복 스프링 배치 작업 인스턴스 (0) | 2019.10.04 |
[SPRING] 봄 보안에 차단 - URL 패턴 주문 (0) | 2019.10.04 |
[SPRING] QueryDsl는 - 어떻게 받는다는와 Q 클래스를 만드는 방법? (0) | 2019.10.04 |