Main
package com.example.quiz1practice;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import com.example.quiz1practice.model.Student;
import com.example.quiz1practice.model.StudentRepository;
@SpringBootApplication
public class Quiz1practiceApplication {
public static void main(String[] args) {
SpringApplication.run(Quiz1practiceApplication.class, args);
}
@Bean
ApplicationRunner init(StudentRepository repository){
return args -> {
repository.save(new Student("John Doe","johndoe@gmail.com","CSIS"));
repository.save(new Student("Jane Doe","janedoe@gmail.com","Accounting"));
repository.findAll().forEach(System.out::println);
};
}
}
Model / Student
src/main/java/com/example/crs/model/
package com.example.quiz1practice.model;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name="student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name="name")
private String name;
@Column(name="email")
private String email;
@Column(name="department")
private String department;
public Student() {
}
public Student(String name, String email, String department){
this.name = name;
this.email = email;
this.department = department;
}
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getDepartment(){
return department;
}
public void setDepartment(String department){
this.department = department;
}
}
Model / StudentRepository
package com.example.quiz1practice.model;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRepository extends JpaRepository<Student, Integer>{
}
Controller / StudentController
src/main/java/com/example/[project name]/controller/
package com.example.quiz1practice.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.quiz1practice.model.Student;
import com.example.quiz1practice.model.StudentRepository;
@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("/api")
public class StudentController {
@Autowired
StudentRepository studentRepository;
@GetMapping("/students")
public ResponseEntity<List<Student>> getAllStudents() {
try {
List<Student> students = new ArrayList<Student>();
studentRepository.findAll().forEach(students::add);
if (students.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<>(students, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
// New method: Get course by ID
@GetMapping("/students/{id}")
public ResponseEntity<Student> getStudentById(@PathVariable("id") Integer id) {
Optional<Student> studentData = studentRepository.findById(id);
if (studentData.isPresent()) {
return new ResponseEntity<>(studentData.get(), HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
// Create student with validation
@PostMapping("/students")
public ResponseEntity<Object> createStudent(@RequestBody Student student) {
String validationError = validateStudentInput(student);
if (validationError != null) {
return ResponseEntity.badRequest().body("{\"error\": \"" + validationError + "\"}");
}
try {
Student _student = studentRepository.save(
new Student(student.getName(), student.getEmail(), student.getDepartment())
);
return new ResponseEntity<>(_student, HttpStatus.CREATED);
} catch (Exception e) {
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
// Update student with validation
@PutMapping("/students/{id}")
public ResponseEntity<Object> updateStudent(@PathVariable("id") Integer id, @RequestBody Student student) {
Optional<Student> studentData = studentRepository.findById(id);
if (!studentData.isPresent()) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
String validationError = validateStudentInput(student);
if (validationError != null) {
return ResponseEntity.badRequest().body("{\"error\": \"" + validationError + "\"}");
}
try {
Student _student = studentData.get();
_student.setName(student.getName());
_student.setEmail(student.getEmail());
_student.setDepartment(student.getDepartment());
return new ResponseEntity<>(studentRepository.save(_student), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
// 👇 **Place the validateStudentInput method here, at the bottom of the class**
private String validateStudentInput(Student student) {
if (student.getName() == null || student.getName().trim().isEmpty()) {
return "Name cannot be blank or empty.";
}
if (student.getEmail() == null || !student.getEmail().matches("^[A-Za-z0-9+_.-]+@(.+)$")) {
return "Invalid email format. Please provide a valid email address.";
}
if (student.getDepartment() == null || student.getDepartment().trim().isEmpty()) {
return "Department cannot be null or empty.";
}
return null; // No errors
}
// New method: Delete a student
@DeleteMapping("/students/{id}")
public ResponseEntity<Integer> deleteStudent(@PathVariable("id") Integer id) {
try {
studentRepository.deleteById(id);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
Others
src/main/resources/application.properties
spring.application.name=crs
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
Init
CtrlShftP > Sprint Initializr > Create Maven > 3.4.1 > Java > com.example >[project name] > Jar > Java version 21 > Spring Web / Spring Data JPa / H2 Database
+ JDK installed
JDBC URL: jdbc:h2:mem:testdb
Postman
Header
Key: Content-Type
Value: Application/JSON
Body
raw
{
"id": 3,
"name": "",
"email": "jamesdoe@gmail.com",
"department": "Humanities"
}
0 comments:
Post a Comment