= 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; @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); ret = joke.getValue(); } } catch(Exception ex){ logger.error("error",ex); } JokeResponse jr = new JokeResponse(); jr.setResponse(ret); return jr; } } }}}