Giriş
1. İsteğe kendimiz cevap verebiliriz.
2. İsteği başka bir bileşene gönderebiliriz.
Örnek - get İsteğine Enpoint İçinde Cevap Verebiliriz
Şöyle yaparız
@Componentpublic class Router extends RouteBuilder {private static final String NAME_TAG = "name";@Overridepublic void configure() throws Exception {restConfiguration().bindingMode(RestBindingMode.json);rest("hello").get().route().choice().when(isNull(header(NAME_TAG))).setProperty(NAME_TAG, constant("world")).otherwise().setProperty(NAME_TAG, header(NAME_TAG)).end().setBody(simple(String.format("Hello, ${property.%s}!", NAME_TAG)));}}
Örnek - get ile Aynı Sınıftaki Route Tetiklemek
Şöyle yaparız. Bu örnekte istek endpoint'ten from () ile tanımlanan Route'a yönlendiriliyor.
rest().get("hello").route().to("direct:say-hi").endRest().get("bye").route().to("direct:say-bye").endRest();from("direct:say-hi").choice().when(isNull(header(NAME_TAG))).setProperty(NAME_TAG, constant("world")).otherwise().setProperty(NAME_TAG, header(NAME_TAG)).end().setBody(simple(String.format("Hello, ${property.%s}!", NAME_TAG)));from("direct:say-bye").setBody(simple("Bye, see you soon!"));
Örnek - get ile Başka Sınıftaki Route Tetiklemek
Şöyle yaparız. Bu örnekte istek endpoint'ten from () ile tanımlanan Route'a yönlendiriliyor. Route ise .process(...) aracılığıyla isteği işliyor
@Componentpublic class RestConfig extends RouteBuilder{@Overridepublic void configure() throws Exception {rest("/convert").get("/celsius/to/fahrenheit/{num}").consumes("text/plain").produces("text/plain").description("Convert a temperature in Celsius to Fahrenheit").param().name("num").type(RestParamType.path).description("Temperature in Celsius").dataType("int").endParam().to("direct:celsius-to-fahrenheit").get("/fahrenheit/to/celsius/{num}").consumes("text/plain").produces("text/plain").description("Convert a temperature in Fahrenheit to Celsius").param().name("num").type(RestParamType.path).description("Temperature in Fahrenheit").dataType("int").endParam().to("direct:fahrenheit-to-celsius");}}
Bu rest noktasını tetiklemek için şöyle yaparız
curl localhost:9090/convert/celcius/to/fahrenheit/50
Parametreye karşı bileşende erişmek için şöyle yaparız
@Componentpublic class Soap2Rest extends RouteBuilder{@Overridepublic void configure() throws Exception {from("direct:celsius-to-fahrenheit").removeHeaders("CamelHttp*").process(new Processor() {@Overridepublic void process(Exchange exchange) throws Exception {Double.valueOf(exchange.getIn().getHeader("num"));...}})...}}
Örnek - get ile Aynı Sınıftaki Route Tetiklemek
Şöyle yaparız. Bu örnekte istek endpoint'ten from () ile tanımlanan Route'a yönlendiriliyor. Route ise .bean(...) metoduyla isteği işliyor
@Componentpublic class BookRoute extends RouteBuilder {private final Environment env;public BookRoute(Environment env) {this.env = env;}public void configure() throws Exception {restConfiguration().contextPath(env.getProperty("camel.component.servlet.mapping.contextPath", "/rest/*")).apiContextPath("/api-doc").apiProperty("api.title", "Spring Boot Camel Postgres Rest API.").apiProperty("api.version", "1.0").apiProperty("cors", "true").apiContextRouteId("doc-api").port(env.getProperty("server.port", "8080")).bindingMode(RestBindingMode.json);rest("/book").consumes(MediaType.APPLICATION_JSON_VALUE).produces(MediaType.APPLICATION_JSON_VALUE).get("/{name}").route().to("{{route.findBookByName}}").endRest().get("/").route().to("{{route.findAllBooks}}").endRest().post("/").route().marshal().json().unmarshal(getJacksonDataFormat(Book.class)).to("{{route.saveBook}}").endRest().delete("/{bookId}").route().to("{{route.removeBook}}").end();from("{{route.findBookByName}}").log("Received header : ${header.name}").bean(BookService.class, "findBookByName(${header.name})");from("{{route.findAllBooks}}").bean(BookService.class, "findAllBooks");from("{{route.saveBook}}").log("Received Body ${body}").bean(BookService.class, "addBook(${body})");from("{{route.removeBook}}").log("Received header : ${header.bookId}").bean(BookService.class, "removeBook(${header.bookId})");}private JacksonDataFormat getJacksonDataFormat(Class<?> unmarshalType) {JacksonDataFormat format = new JacksonDataFormat();format.setUnmarshalType(unmarshalType);return format;}}
Örnek - get ile Harici Bir Servise Get Yapmak
Şöyle yaparız. toD() ile bir başka servise çağrı yapıyoruz.
from(CamelConstants.WEATHER_ROUTE).setProperty(CITY_TAG, header(CITY_TAG)).removeHeaders("*").setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET)).toD(generateServiceUrl()).unmarshal().json(JsonLibrary.Jackson, WeatherResponse.class).process(weatherAdviserProcessor)
toD() ile kullanılan metod şöyle
private static final String WEATHER_SERVICE_URL ="http://api.weatherstack.com/current?access_key=%s&query=%s&units=m";@Value(value = "${api.key}")private String apiKey;private String generateServiceUrl() {return String.format(WEATHER_SERVICE_URL, apiKey,
String.format("${property.%s}", CITY_TAG));}
Gelen cevabı işleyip çeviren processor şöyle
@Componentpublic class WeatherAdviserProcessor implements Processor {@Overridepublic void process(Exchange exchange) throws Exception {WeatherResponse weatherResponse = exchange.getIn().getBody(WeatherResponse.class);...String advice = "...";exchange.getOut().setBody(advice);}}
Hiç yorum yok:
Yorum Gönder