Sorry za kod - niestety pisze z lotniska i zaraz mi samolot poleci jak nie pójde - kilka rzeczy sobie poprawisz....
package pl.setblack.fsdhfkshf;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import javaslang.collection.List;
import javaslang.control.Option;
import javaslang.jackson.datatype.JavaslangModule;
import ratpack.http.client.HttpClient;
import ratpack.jackson.Jackson;
import ratpack.server.RatpackServer;
import java.net.URI;
import java.time.Duration;
/**
* Created by dobry wujek on 3/11/17.
*/
public class BeMyServerBabe {
public static final String COUNTRY_INFO_URL = "http://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wso/FullCountryInfoAllCountries/JSON";
public static void main(final String ... args) throws Exception{
final ObjectMapper mapper = configureJacksonMapping();
RatpackServer.start(spec -> spec
.registryOf(reg -> reg.add(mapper))
.handlers(chain -> chain.get("country/:name", ctx ->{
Option<String> countryName = Option.of(ctx.getPathTokens().get("name"));
final HttpClient httpClient = HttpClient.of(rs->rs.readTimeout(Duration.ofMinutes(1)));
httpClient.get(URI.create(COUNTRY_INFO_URL)).map(response -> {
final List<CountryData> countries = mapper
.readValue(
response.getBody().getInputStream(),
new TypeReference<List<CountryData>>(){});
System.out.println("got countries:"+ countries.size());
return countries.filter( country -> country.sName.equals(countryName.getOrElse("unknown")))
.headOption();
}).then( countryOption ->
ctx
.render(
Jackson.json(countryOption
.getOrElseThrow(() -> new IllegalArgumentException(countryName.getOrElse("???"))))
));
})));
}
private static final ObjectMapper configureJacksonMapping() {
return new ObjectMapper()
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaslangModule());
}
}
@JsonDeserialize
@JsonIgnoreProperties(ignoreUnknown = true)
class CountryData {
public final String sName;
public final String sISOCode;
public final String sCurrencyISOCode;
public final String sCapitalCity;
@JsonCreator
CountryData(String sName, String sISOCode, String sCurrencyISOCode, String sCapitalCity) {
this.sName = sName;
this.sISOCode = sISOCode;
this.sCurrencyISOCode = sCurrencyISOCode;
this.sCapitalCity = sCapitalCity;
}
}
i build.gradle
group 'pl.setblack.kdfghe'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
compileJava {
options.compilerArgs << '-parameters'
}
dependencies {
compile group: 'io.ratpack', name: 'ratpack-core', version: '1.4.4'
compile 'io.javaslang:javaslang:2.1.0-alpha'
compile 'io.javaslang:javaslang-jackson:2.1.0-alpha'
compile group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.0.5'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.6'
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-parameter-names', version: '2.8.6'
testCompile group: 'io.ratpack', name: 'ratpack-test', version: '1.4.4'
}
Ten parametr kompilatora -parameters jest bardzo ważny (uważaj w eclipse lub intellij,żeby ustawić).
http://localhost:5050/country/Poland
i świat jest twój.