-
Notifications
You must be signed in to change notification settings - Fork 725
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Ranga Rao Karanam
authored and
Ranga Rao Karanam
committed
Jan 3, 2017
1 parent
fe042a1
commit 3c2acc2
Showing
1 changed file
with
373 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,383 @@ | ||
##What You Will Learn during this Step: | ||
- First | ||
- Second | ||
- Third | ||
- Create a REST Service to add a new question to survey | ||
- @PostMapping("/surveys/{surveyId}/questions") | ||
- @RequestBody Question question | ||
- ResponseEntity.created(location).build() | ||
- ResponseEntity.noContent().build() | ||
|
||
## Useful Snippets and References | ||
First Snippet | ||
``` | ||
@PostMapping("/surveys/{surveyId}/questions") | ||
ResponseEntity<?> add(@PathVariable String surveyId, | ||
@RequestBody Question question) { | ||
Question createdTodo = surveyService.addQuestion(surveyId, question); | ||
if (createdTodo == null) { | ||
return ResponseEntity.noContent().build(); | ||
} | ||
URI location = ServletUriComponentsBuilder.fromCurrentRequest() | ||
.path("/{id}").buildAndExpand(createdTodo.getId()).toUri(); | ||
return ResponseEntity.created(location).build(); | ||
} | ||
``` | ||
Second Snippet | ||
|
||
## Exercises | ||
- Create more REST services of your choice | ||
|
||
## Files List | ||
### /pom.xml | ||
``` | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<groupId>com.in28minutes</groupId> | ||
<artifactId>springboot-for-beginners-example</artifactId> | ||
<version>0.0.1-SNAPSHOT</version> | ||
<name>Your First Spring Boot Example</name> | ||
<packaging>jar</packaging> | ||
<parent> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-parent</artifactId> | ||
<version>1.4.0.RELEASE</version> | ||
</parent> | ||
<dependencies> | ||
<dependency> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-starter-web</artifactId> | ||
</dependency> | ||
</dependencies> | ||
<properties> | ||
<java.version>1.8</java.version> | ||
</properties> | ||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.springframework.boot</groupId> | ||
<artifactId>spring-boot-maven-plugin</artifactId> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</project> | ||
``` | ||
### /src/main/java/com/in28minutes/springboot/Application.java | ||
``` | ||
package com.in28minutes.springboot; | ||
## Exercises | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.boot.SpringApplication; | ||
import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
import org.springframework.context.ApplicationContext; | ||
import org.springframework.stereotype.Component; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
@SpringBootApplication | ||
public class Application { | ||
public static void main(String[] args) { | ||
ApplicationContext ctx = SpringApplication.run(Application.class, args); | ||
} | ||
@RestController | ||
class SomeBean { | ||
@Autowired | ||
private SomeDependency someDependency; | ||
@RequestMapping("/") | ||
public String index() { | ||
return someDependency.getSomething(); | ||
} | ||
} | ||
@Component | ||
class SomeDependency { | ||
public String getSomething() { | ||
return "Hello! Welcome!"; | ||
} | ||
} | ||
} | ||
``` | ||
### /src/main/java/com/in28minutes/springboot/controller/SurveyController.java | ||
``` | ||
package com.in28minutes.springboot.controller; | ||
import java.util.List; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.RestController; | ||
import com.in28minutes.springboot.model.Question; | ||
import com.in28minutes.springboot.service.SurveyService; | ||
@RestController | ||
class SurveyController { | ||
@Autowired | ||
private SurveyService surveyService; | ||
@GetMapping("/surveys/{surveyId}/questions") | ||
public List<Question> retrieveQuestions(@PathVariable String surveyId) { | ||
return surveyService.retrieveQuestions(surveyId); | ||
} | ||
@GetMapping(path = "/surveys/{surveyId}/questions/{questionId}") | ||
public Question retrieveQuestion(@PathVariable String surveyId, | ||
@PathVariable String questionId) { | ||
return surveyService.retrieveQuestion(surveyId, questionId); | ||
} | ||
} | ||
``` | ||
### /src/main/java/com/in28minutes/springboot/model/Question.java | ||
``` | ||
package com.in28minutes.springboot.model; | ||
import java.util.List; | ||
public class Question { | ||
private String id; | ||
private String description; | ||
private String correctAnswer; | ||
private List<String> options; | ||
// Needed by Caused by: com.fasterxml.jackson.databind.JsonMappingException: | ||
// Can not construct instance of com.in28minutes.springboot.model.Question: | ||
// no suitable constructor found, can not deserialize from Object value | ||
// (missing default constructor or creator, or perhaps need to add/enable | ||
// type information?) | ||
public Question() { | ||
} | ||
public Question(String id, String description, String correctAnswer, | ||
List<String> options) { | ||
super(); | ||
this.id = id; | ||
this.description = description; | ||
this.correctAnswer = correctAnswer; | ||
this.options = options; | ||
} | ||
public String getId() { | ||
return id; | ||
} | ||
public void setId(String id) { | ||
this.id = id; | ||
} | ||
public String getDescription() { | ||
return description; | ||
} | ||
## Files List | ||
public String getCorrectAnswer() { | ||
return correctAnswer; | ||
} | ||
public List<String> getOptions() { | ||
return options; | ||
} | ||
@Override | ||
public String toString() { | ||
return String | ||
.format("Question [id=%s, description=%s, correctAnswer=%s, options=%s]", | ||
id, description, correctAnswer, options); | ||
} | ||
@Override | ||
public int hashCode() { | ||
final int prime = 31; | ||
int result = 1; | ||
result = prime * result + (id == null ? 0 : id.hashCode()); | ||
return result; | ||
} | ||
@Override | ||
public boolean equals(Object obj) { | ||
if (this == obj) { | ||
return true; | ||
} | ||
if (obj == null) { | ||
return false; | ||
} | ||
if (getClass() != obj.getClass()) { | ||
return false; | ||
} | ||
Question other = (Question) obj; | ||
if (id == null) { | ||
if (other.id != null) { | ||
return false; | ||
} | ||
} else if (!id.equals(other.id)) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
} | ||
``` | ||
### /src/main/java/com/in28minutes/springboot/model/Survey.java | ||
``` | ||
package com.in28minutes.springboot.model; | ||
import java.util.List; | ||
public class Survey { | ||
private String id; | ||
private String title; | ||
private String description; | ||
private List<Question> questions; | ||
public Survey(String id, String title, String description, | ||
List<Question> questions) { | ||
super(); | ||
this.id = id; | ||
this.title = title; | ||
this.description = description; | ||
this.questions = questions; | ||
} | ||
public String getId() { | ||
return id; | ||
} | ||
public String getTitle() { | ||
return title; | ||
} | ||
public String getDescription() { | ||
return description; | ||
} | ||
public List<Question> getQuestions() { | ||
return questions; | ||
} | ||
@Override | ||
public String toString() { | ||
return String.format( | ||
"Survey [id=%s, title=%s, description=%s, questions=%s]", id, | ||
title, description, questions); | ||
} | ||
} | ||
``` | ||
### /src/main/java/com/in28minutes/springboot/service/SurveyService.java | ||
``` | ||
package com.in28minutes.springboot.service; | ||
import java.math.BigInteger; | ||
import java.security.SecureRandom; | ||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.List; | ||
import org.springframework.stereotype.Component; | ||
import com.in28minutes.springboot.model.Question; | ||
import com.in28minutes.springboot.model.Survey; | ||
@Component | ||
public class SurveyService { | ||
private static List<Survey> surveys = new ArrayList<>(); | ||
static { | ||
Question question1 = new Question("Question1", | ||
"Largest Country in the World", "Russia", Arrays.asList( | ||
"India", "Russia", "United States", "China")); | ||
Question question2 = new Question("Question2", | ||
"Most Populus Country in the World", "China", Arrays.asList( | ||
"India", "Russia", "United States", "China")); | ||
Question question3 = new Question("Question3", | ||
"Highest GDP in the World", "United States", Arrays.asList( | ||
"India", "Russia", "United States", "China")); | ||
Question question4 = new Question("Question4", | ||
"Second largest english speaking country", "India", | ||
Arrays.asList("India", "Russia", "United States", "China")); | ||
List<Question> questions = new ArrayList<>(Arrays.asList(question1, | ||
question2, question3, question4)); | ||
Survey survey = new Survey("Survey1", "My Favorite Survey", | ||
"Description of the Survey", questions); | ||
surveys.add(survey); | ||
} | ||
public List<Survey> retrieveAllSurveys() { | ||
return surveys; | ||
} | ||
public Survey retrieveSurvey(String surveyId) { | ||
for (Survey survey : surveys) { | ||
if (survey.getId().equals(surveyId)) { | ||
return survey; | ||
} | ||
} | ||
return null; | ||
} | ||
public List<Question> retrieveQuestions(String surveyId) { | ||
Survey survey = retrieveSurvey(surveyId); | ||
if (survey == null) { | ||
return null; | ||
} | ||
return survey.getQuestions(); | ||
} | ||
public Question retrieveQuestion(String surveyId, String questionId) { | ||
Survey survey = retrieveSurvey(surveyId); | ||
if (survey == null) { | ||
return null; | ||
} | ||
for (Question question : survey.getQuestions()) { | ||
if (question.getId().equals(questionId)) { | ||
return question; | ||
} | ||
} | ||
return null; | ||
} | ||
private SecureRandom random = new SecureRandom(); | ||
public Question addQuestion(String surveyId, Question question) { | ||
Survey survey = retrieveSurvey(surveyId); | ||
if (survey == null) { | ||
return null; | ||
} | ||
String randomId = new BigInteger(130, random).toString(32); | ||
question.setId(randomId); | ||
survey.getQuestions().add(question); | ||
return question; | ||
} | ||
} | ||
``` | ||
### /src/main/resources/application.properties | ||
``` | ||
logging.level.org.springframework: DEBUG | ||
``` |