= ChuckNorris = * Test app that invokes a ChuckNorris random joke API == Structure == {{{#!highlight bash . ├── pom.xml ├── src │ └── main │ └── java │ ├── chucknorris │ │ └── bitarus │ │ └── allowed │ │ └── org │ │ ├── Application.java │ │ ├── ChuckNorrisController.java │ │ ├── Joke.java │ │ └── JokeResponse.java }}} === pom.xml === {{{#!highlight xml 4.0.0 bitarus.allowed.org chucknorris 0.1.0 org.springframework.boot spring-boot-starter-parent 2.1.6.RELEASE org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web com.google.code.gson gson 2.8.6 compile chucknorris.bitarus.allowed.org.Application org.springframework.boot spring-boot-maven-plugin spring-milestone http://repo.spring.io/libs-release spring-milestone http://repo.spring.io/libs-release }}} === Application.java === {{{#!highlight java package chucknorris.bitarus.allowed.org; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.context.annotation.ComponentScan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @ComponentScan //scans for @Component beans @EnableAutoConfiguration public class Application { private static Logger logger; public static void main(String[] args) { logger = LoggerFactory.getLogger(Application.class); logger.info("Starting application"); SpringApplication.run(Application.class, args); } } }}} === ChuckNorrisController.java === {{{#!highlight java package chucknorris.bitarus.allowed.org; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.ui.Model; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ResponseBody; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import org.springframework.http.HttpMethod; import com.google.gson.Gson; import java.util.stream.Stream; import java.util.stream.Collectors; import java.util.List; import java.util.ArrayList; @Controller public class ChuckNorrisController{ private final Logger logger = LoggerFactory.getLogger(ChuckNorrisController.class); public ChuckNorrisController(){ logger.info("ChuckNorrisController created"); } @RequestMapping("/chucknorris") @ResponseBody // http://localhost:8080/chucknorris public JokeResponse chucknorris() { String ret = ""; Gson gson = new Gson(); try { URL url = new URL("https://api.chucknorris.io/jokes/random"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); logger.info( Integer.toString(connection.getResponseCode() )); try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) { StringBuilder response = new StringBuilder(); String responseLine = null; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } Joke joke = gson.fromJson(response.toString(), Joke.class); List jokesList = new ArrayList(); jokesList.add(joke); List jokesList2 = jokesList.stream().map( item ->{item.setValue(item.getValue().toUpperCase()); return item;} ).collect(Collectors.toList()); joke = jokesList2.get(0); ret = joke.getValue(); } } catch(Exception ex){ logger.error("error",ex); } JokeResponse jr = new JokeResponse(); jr.setResponse(ret); return jr; } } }}} === Joke.java === {{{#!highlight java package chucknorris.bitarus.allowed.org; import com.google.gson.annotations.SerializedName; public class Joke{ @SerializedName("categories") private String[] categories; @SerializedName("created_at") private String createdAt; @SerializedName("icon_url") private String iconUrl; @SerializedName("id") private String id; @SerializedName("updated_at") private String updatedAt; @SerializedName("url") private String url; @SerializedName("value") private String value; public String[] getCategories(){ return this.categories; } public String getCreatedAt(){ return this.createdAt; } public String getIconUrl(){ return this.iconUrl; } public String getId(){ return this.id; } public String getUpdatedAt(){ return this.updatedAt; } public String getUrl(){ return this.url; } public String getValue(){ return this.value; } public void setCategories(String[] categories){ this.categories = categories; } public void setCreatedAt(String createdAt ){ this.createdAt = createdAt; } public void setIconUrl(String iconUrl){ this.iconUrl=iconUrl; } public void setId(String id){ this.id=id; } public void setUpdatedAt(String updatedAt){ this.updatedAt=updatedAt; } public void setUrl(String url){ this.url=url; } public void setValue(String value){ this.value=value; } } }}} === JokeResponse.java === {{{#!highlight java package chucknorris.bitarus.allowed.org; import com.google.gson.annotations.SerializedName; public class JokeResponse{ @SerializedName("response") private String response; public String getResponse(){ return this.response; } public void setResponse(String response){ this.response = response; } } }}}