$.TaskRestController.java Source code

Java tutorial

Introduction

Here is the source code for $.TaskRestController.java

Source

    #set($symbol_pound='#')#set($symbol_dollar='$')#set($symbol_escape='\')
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package ${package}.rest;

    import java.net.URI;
    import java.util.List;

    import javax.validation.Validator;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseStatus;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.util.UriComponentsBuilder;
import ${package}.entity.Task;
import ${package}.service.task.TaskService;
    import org.springside.modules.beanvalidator.BeanValidators;
    import org.springside.modules.web.MediaTypes;

    /**
     * TaskRestful APIController.
     * 
     * @author calvin
     */
    @RestController
    @RequestMapping(value = "/api/v1/task")
    public class TaskRestController {

        private static Logger logger = LoggerFactory.getLogger(TaskRestController.class);

        @Autowired
        private TaskService taskService;

        @Autowired
        private Validator validator;

        @RequestMapping(method = RequestMethod.GET, produces = MediaTypes.JSON_UTF_8)
        public List<Task> list() {
            return taskService.getAllTask();
        }

        @RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaTypes.JSON_UTF_8)
        public Task get(@PathVariable("id") Long id) {
            Task task = taskService.getTask(id);
            if (task == null) {
                String message = "?(id:" + id + ")";
                logger.warn(message);
                throw new RestException(HttpStatus.NOT_FOUND, message);
            }
            return task;
        }

        @RequestMapping(method = RequestMethod.POST, consumes = MediaTypes.JSON)
        public ResponseEntity<?> create(@RequestBody Task task, UriComponentsBuilder uriBuilder) {
            // JSR303 Bean Validator, RestExceptionHandler?.
            BeanValidators.validateWithException(validator, task);

            // ?
            taskService.saveTask(task);

            // Restful?url, ?id.
            Long id = task.getId();
            URI uri = uriBuilder.path("/api/v1/task/" + id).build().toUri();
            HttpHeaders headers = new HttpHeaders();
            headers.setLocation(uri);

            return new ResponseEntity(headers, HttpStatus.CREATED);
        }

        @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaTypes.JSON)
        // Restful204??, . ?200??.
        @ResponseStatus(HttpStatus.NO_CONTENT)
        public void update(@RequestBody Task task) {
            // JSR303 Bean Validator, RestExceptionHandler?.
            BeanValidators.validateWithException(validator, task);

            // ?
            taskService.saveTask(task);
        }

        @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
        @ResponseStatus(HttpStatus.NO_CONTENT)
        public void delete(@PathVariable("id") Long id) {
            taskService.deleteTask(id);
        }
    }