I have developed this restful service using spring boot. Please look at the code if there is something to change to be more consistently.
Resource
@RestController
@RequestMapping(value = "/api/cars")
public class MuscleCarResource {
@Autowired
private MuscleCarService muscleCarService;
@RequestMapping(value = "/get-car/{id}", method = RequestMethod.GET)
public ResponseEntity<MuscleCar> getMuscleCar(@PathVariable("id") int id) {
try {
MuscleCar muscleCar = muscleCarService.getCar(id);
if (muscleCar != null) {
return ResponseEntity.status(HttpStatus.OK).body(muscleCar);
} else {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
}
@RequestMapping(value = "/delete-car/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Void> deleteMuscleCar(@PathVariable("id") int id) {
try {
muscleCarService.removeCarFromList(id);
return (ResponseEntity<Void>) ResponseEntity.status(HttpStatus.OK);
} catch (Exception e) {
return (ResponseEntity<Void>) ResponseEntity.status(HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value = "/add-car", method = RequestMethod.POST)
public ResponseEntity<Void> addCarToList( @RequestBody MuscleCar muscleCar) {
try {
muscleCarService.addCarToList(muscleCar);
return ResponseEntity.status(HttpStatus.OK).build();
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
}
@RequestMapping(value = "/cars", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> listAllCars() {
try {
List<Map<String, Object>> result = muscleCarService.listAllCars();
return ResponseEntity.status(HttpStatus.OK).body(result);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
}
@RequestMapping(value = "/update-car/{id}", method = RequestMethod.PUT)
public ResponseEntity<Void> updateCar(@PathVariable("id") int id, @RequestBody MuscleCar muscleCar) {
try {
muscleCarService.updateCarFromList(id, muscleCar);
return ResponseEntity.status(HttpStatus.OK).build();
} catch(Exception e ) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
}
}
Service
@Service
public class MuscleCarService {
@Autowired
private MuscleCarDao muscleCarDao;
public MuscleCar getCar(int id) {
if (id <= 0) {
throw new IllegalArgumentException("ID can not be 0 or <0");
}
return muscleCarDao.getCarFromList(id);
}
public void removeCarFromList(int id) {
if (id <= 0) {
throw new IllegalArgumentException("ID can not be 0 or <0 or this id do not exist");
}
muscleCarDao.removeCarFromList(id);
}
public List<Map<String, Object>> listAllCars() {
List<Map<String, Object>> result = muscleCarDao.listAllCars();
if (result.size() > 0) {
return result;
} else {
return null;
}
}
public void addCarToList(MuscleCar muscleCar) {
if (muscleCar == null) {
throw new IllegalArgumentException("The passed object cna not be null.");
}
muscleCarDao.addCarToList(muscleCar);
}
public void updateCarFromList(int id, MuscleCar muscleCar) {
if ( id <= 0 && muscleCar == null) {
throw new IllegalArgumentException("The passed object cna not be null.");
}
muscleCarDao.updateCarFromList(id, muscleCar);
}
}
DAO
@Repository
public class MuscleCarDaoImpl extends JdbcDaoSupport implements MuscleCarDao {
@Autowired
public MuscleCarDaoImpl(JdbcTemplate jdbcTemplate, DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
setJdbcTemplate(jdbcTemplate);
}
@Override
public MuscleCar getCarFromList(int id) {
String sql = "select * from muscle_cars where id = ?";
Object[] args = new Object[] { id };
return getJdbcTemplate().queryForObject(sql, args, new MuscleCarRowMapper());
}
@Override
public void removeCarFromList(int id) {
String sql = "delete from muscle_cars where id = ?";
Object[] args = new Object[] { id };
getJdbcTemplate().update(sql, args);
}
@Override
public void addCarToList(MuscleCar muscleCar) {
String sql = "insert into muscle_cars (car_brand, car_model, horsepower, car_engine) values (?, ?, ?, ?)";
Object[] args = new Object[] {muscleCar.getCarBrand(), muscleCar.getCarModel(), muscleCar.getHorsepower(), muscleCar.getCarEngine()};
getJdbcTemplate().update(sql, args);
}
@Override
public void updateCarFromList(int id, MuscleCar muscleCar) {
String sql = "update muscle_cars set car_brand = ?, car_model = ?, horsepower = ?, car_engine = ? where id =?";
Object[] args = new Object[] {muscleCar.getCarBrand(), muscleCar.getCarModel(), muscleCar.getHorsepower(), muscleCar.getCarEngine(), id};
getJdbcTemplate().update(sql, args);
}
@Override
public List<Map<String, Object>> listAllCars() {
String sql = "select * from muscle_cars";
return getJdbcTemplate().queryForList(sql);
}
}