Spring Boot - API Cantabile_FP Hands-On Solutions.
Course Id:- 55962
1. Build A REST API APP , [Link] Boot DATABASE Integration (Same)
1. [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@RestController
@RequestMapping("/test/")
public class HospitalController {
@Autowired
private HospitalService hospitalService;
@RequestMapping(value = "/hospitals/{id}", method = [Link])
public @ResponseBody Hospital getHospital(@PathVariable("id") int id) throws
Exception {
Hospital hospital = [Link](id);
return hospital;
}
@RequestMapping(value = "/hospitals", method = [Link])
public @ResponseBody List<Hospital> getAllHospitals() throws Exception {
return [Link]();
}
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Service
public class HospitalService {
private List<Hospital> hospitalList=new ArrayList<>([Link](
new Hospital(1001, "Apollo Hospital", "Chennai", 3.8),
new Hospital(1002,"Global Hospital","Chennai", 3.5),
new Hospital(1003,"VCare Hospital","Bangalore", 3)));
public List<Hospital> getAllHospitals(){
List<Hospital> hospitalList= new ArrayList<Hospital>();
return hospitalList;
}
public Hospital getHospital(int id){
return [Link]().filter(c->[Link]()==(id)).findFirst().get();
}
3. [Link]
package [Link];
public class Hospital {
private int id;
private String name;
private String city;
private double rating;
public Hospital() {
public Hospital(int id, String name, String city, double rating) {
[Link]= id;
[Link]= name;
[Link]= city;
[Link]=rating;
}
public int getId() {
return id;
}
public void setId(int id) {
[Link] = id;
}
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
[Link] = city;
}
public double getRating() {
return rating;
}
public void setRating(double rating) {
[Link] = rating;
}
}
3. Spring Boot Security
1. [Link]
package [Link];
import [Link];
import [Link];
import
[Link]
onManagerBuilder;
import [Link];
import
[Link];
import
[Link]
rerAdapter;
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationEntryPoint authEntryPoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
[Link]().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic()
.authenticationEntryPoint(authEntryPoint);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws
Exception {
[Link]().withUser("username").password("password").roles("USER
");
}
}
2. [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class AuthenticationEntryPoint extends BasicAuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authEx)
throws IOException, ServletException {
[Link]("LoginUser", "Basic " +getRealmName());
[Link](HttpServletResponse.SC_UNAUTHORIZED);
PrintWriter writer = [Link]();
[Link]("HTTP Status 401 - " + [Link]());
}
@Override
public void afterPropertiesSet() throws Exception {
setRealmName("springboot");
[Link]();
}
}
4. Spring Boot Consume Rest API
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@SpringBootApplication
public class RestBooksApi {
static RestTemplate restTemplate;
public RestBooksApi(){
restTemplate = new RestTemplate();
}
public static void main(String[] args) {
[Link]([Link], args);
try {
JSONObject books=getEntity();
[Link](books);
}
catch(Exception e) {
[Link]();
}
}
/**
* get entity
* @throws JSONException
*/
public static JSONObject getEntity() throws Exception{
JSONObject books = new JSONObject();
String getUrl = "[Link]
q=isbn:0747532699";
HttpHeaders headers = new HttpHeaders();
[Link](MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(headers);
ResponseEntity<Map> bookList = [Link](getUrl,
[Link], entity, [Link]);
if ([Link]() == [Link]) {
books = new JSONObject([Link]());
}
return books;
}
5. Build a Full Stack API - Try-it-Out
1. [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class AuthenticationEntryPoint extends BasicAuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authEx)
throws IOException, ServletException {
[Link]("LoginUser", "Basic " +getRealmName());
[Link](HttpServletResponse.SC_UNAUTHORIZED);
PrintWriter writer = [Link]();
[Link]("HTTP Status 401 - " + [Link]());
}
@Override
public void afterPropertiesSet() throws Exception {
setRealmName("springboot");
[Link]();
}
2..[Link]
package [Link];
import [Link];
import [Link];
import
[Link]
onManagerBuilder;
import [Link];
import
[Link];
import
[Link]
rerAdapter;
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationEntryPoint authEntryPoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
[Link]().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic()
.authenticationEntryPoint(authEntryPoint);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws
Exception {
[Link]().withUser("username").password("password").roles("USER
");
}
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@RestController
@RequestMapping("/test/")
public class HospitalController {
@Autowired
private HospitalService hospitalService;
@GetMapping("hospitals/{id}")
public @ResponseBody Hospital getHospital(@PathVariable("id") int id) throws
Exception {
return [Link](id);
@GetMapping("hospitals/")
public @ResponseBody List<Hospital> getAllHospitals() throws Exception {
return [Link]();
@PostMapping("hospitals/")
public ResponseEntity<String> addHospital(@RequestBody Hospital hospital ) {
[Link](hospital);
//URI
location=[Link]().path("/{id}").buildAndExp
and([Link]()).toUri();
return new ResponseEntity<>([Link]);
}
public ResponseEntity<String> updateHospital(@RequestBody Hospital hospital) {
[Link](hospital);
return [Link]("ok");
}
@DeleteMapping("hospitals/")
public ResponseEntity<String> deleteHospital(@RequestBody Hospital hospital) {
[Link](hospital);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Service
public class HospitalService {
@Autowired
private HospitalRepository hospitalRepository;
public List<Hospital> getAllHospitals(){
List<Hospital> hos = new ArrayList<Hospital>();
[Link]().forEach(hos1 -> [Link](hos1));
return hos;
}
public Hospital getHospital(int id){
return [Link](id);
}
public void addHospital(Hospital hospital){
[Link](hospital);
}
public void updateHospital(Hospital hos){
//if([Link]([Link]()).isPresent())
// {
// Hospital hospital=[Link]([Link]()).get();
// [Link]([Link]());
// [Link]([Link]());
// [Link]([Link]());
[Link](hos);
// }
public void deleteHospital(Hospital hospital) {
[Link](hospital);
}
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
@Entity
public class Hospital {
@Id
public int getId() {
return id;
}
public Hospital() {
super();
}
public void setId(int id) {
[Link] = id;
}
public String getName() {
return name;
}
public Hospital(int id, String name, String city, double rating) {
super();
[Link] = id;
[Link] = name;
[Link] = city;
[Link] = rating;
}
public void setName(String name) {
[Link] = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
[Link] = city;
}
public double getRating() {
return rating;
}
public void setRating(double rating) {
[Link] = rating;
}
private int id;
private String name;
private String city;
private double rating;
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
@Repository
public interface HospitalRepository extends JpaRepository<Hospital,Integer>{
}
[Link]
[Link]=8080
[Link]-sql=true
[Link]=true
[Link]=h2
[Link]=jdbc:h2:mem:testdb
[Link]
insert into hospital values(1,'John','bihar',22);
6) Consume Public APIs - Try-it-Out
1. [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class AuthenticationEntryPoint extends BasicAuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authEx)
throws IOException, ServletException {
[Link]("LoginUser", "Basic " +getRealmName());
[Link](HttpServletResponse.SC_UNAUTHORIZED);
PrintWriter writer = [Link]();
[Link]("HTTP Status 401 - " + [Link]());
}
@Override
public void afterPropertiesSet() throws Exception {
setRealmName("springboot");
[Link]();
}
2. [Link]
package [Link];
import [Link];
public class News {
private String section;
private Results[] results;
private String title;
public Results[] getResults() {
return results;
}
public void setResults(Results[] results) {
[Link] = results;
}
public String getSection() {
return section;
}
public void setSection(String section) {
[Link] = section;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
[Link] = title;
}
3. [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@RestController
@RequestMapping("/api")
public class NewsController {
@Autowired
NewsService newsService;
@RequestMapping(value = "/news/topstories", method = [Link])
public News getNews() throws Exception {
return [Link]();
}
4. [Link]
package [Link];
public class Results{
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
[Link] = title;
}
}
[Link]
package [Link];
import [Link];
import [Link];
import
[Link]
onManagerBuilder;
import [Link];
import
[Link];
import
[Link]
rerAdapter;
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationEntryPoint authEntryPoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
[Link]().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic()
.authenticationEntryPoint(authEntryPoint);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws
Exception {
[Link]().withUser("username").password("password").roles("USER
");
}
}
6. [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Service
public class NewsService {
private String apiKey = "gIIWu7P82GBslJAd0MUSbKMrOaqHjWOo";
private RestTemplate restTemplate = new RestTemplate();
private JSONObject jsonObject;
private JSONArray jsonArray;
private Results[] resultsArray;
private News news=new News();
public News getTopStories() throws Exception {
List<News> topNewsStories = new ArrayList<>();
String Url = "[Link]
key=" + apiKey;
HttpHeaders headers = new HttpHeaders();
[Link](MediaType.APPLICATION_JSON);
HttpEntity entity = new HttpEntity(headers);
ResponseEntity<Map> newsList = [Link](Url, [Link],
entity, [Link]);
if ([Link]() == [Link]) {
jsonObject = new JSONObject([Link]());
jsonArray = [Link]("results");
resultsArray = new Results[[Link]()];
for(int i=0; i<[Link](); i++) {
[Link]([Link](i).get("title").toString());
[Link]([Link](i).get("section").toString());
resultsArray[i]=new Results();
resultsArray[i].setTitle([Link](i).get("title").toString());
[Link](resultsArray);
[Link](news);
}
}
return [Link](0);
}