发表于: 2017-05-28 21:20:52

2 1213


今日完成

任务2主要是要做出REST API

首先要设计一下API

资源GETPOSTPUTDELETE
/enrollment获取所有报名添加一个报名不支持 405 Error不支持 405 Error
/enrollment/{enroll_id}获取一跳报名的信息不支持 405 Error更新一个已有报名删除一条报名


这是最简单的REST了。。不支持批量添加,更新,或删除。

然后就是写controller了


Controller

基本上是半个service layer 和 controler的混合,看网上主流声音还是把controller和business logic 分开,虽然早层多了一层,但是有更好的扩展性,controller只负责去找service layer, service layer就是处理业务逻辑。可是如果应用很简单,就一层解决好了,比如说处理PUT的时候,在controller里面来先判断 是否是要更新一个已经存在的报名,如果是新报名,则返回BAD REQUEDT。同一个Controller里面还再处理下客户提供的数据,如果和原数据不同才更新,这些都应该算Business logic 了吧?

想学习下更优解。。眼下只能做到这么多了。


Controller代码

package com.xiuzhen.enrollment.controller;

 

import java.util.List;

import java.util.Optional;

 

import org.springframework.http.HttpStatus;

import org.springframework.http.MediaType;

import org.springframework.http.ResponseEntity;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

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.ResponseBody;

import org.springframework.web.servlet.DispatcherServlet;

 

import com.xiuzhen.enrollment.dal.enrolldata.EnrollDataDao;

import com.xiuzhen.enrollment.dal.enrolldata.EnrollDataDaoFactory;

import com.xiuzhen.enrollment.po.enrolldata.EnrollData;

 

@Controller

public class EnrollmentController {

 

            private EnrollDataDao edDao = EnrollDataDaoFactory.getEnrollDataDao();

 

            @RequestMapping(value = "/enrollment/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)

            @ResponseBody

            public List<EnrollData> getAllEnrollments() {

                        return edDao.selectAll();

            }

 

            @RequestMapping(value = "/enrollment/", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)

            public ResponseEntity<EnrollData> insertEnrollment(@RequestBody Optional<EnrollData> ed) {

                        EnrollData enrollData = null;

                        try {

                                    if (ed.isPresent()) {

                                                enrollData = ed.get();

                                                enrollData.setCreated_at(System.currentTimeMillis());

                                                enrollData.setUpdated_at(System.currentTimeMillis());

                                                if (edDao.insert(enrollData))

                                                            return new ResponseEntity<EnrollData>(enrollData, HttpStatus.CREATED);

                                    }

                        } catch (Exception e) {

                        }

                        return new ResponseEntity<EnrollData>(new EnrollData(), HttpStatus.BAD_REQUEST);

            }

 

            @RequestMapping(value = "/enrollment/", method = RequestMethod.POST)

            public ResponseEntity<Void> postOnEnrollment() {

                        // 405 error

                        return new ResponseEntity<Void>(HttpStatus.METHOD_NOT_ALLOWED);

            }

 

            @RequestMapping(value = "/enrollment/", method = RequestMethod.PUT)

            public ResponseEntity<Void> putOnEnrollment() {

                        // 405 error

                        return new ResponseEntity<Void>(HttpStatus.METHOD_NOT_ALLOWED);

            }

 

            @RequestMapping(value = "/enrollment/{enroll_id}/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)

            @ResponseBody

            public EnrollData getEnrollmentById(@PathVariable("enroll_id") Optional<Integer> enroll_id) {

                        EnrollData ed = null;

                        try {

                                    if (enroll_id.isPresent())

                                                ed = edDao.selectById(enroll_id.get());

                                    return ed;

                        } catch (Exception e) {

                                    return null;

                        }

            }

 

            @RequestMapping(value = "/enrollment/{enroll_id}", method = RequestMethod.POST)

            public ResponseEntity<Void> postOnEnrollId() {

                        // 405 error

                        return new ResponseEntity<Void>(HttpStatus.METHOD_NOT_ALLOWED);

            }

 

            @RequestMapping(value = "/enrollment/{enroll_id}/", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)

            public ResponseEntity<EnrollData> updateEnrollment(@RequestBody Optional<EnrollData> ed,

                                    @PathVariable("enroll_id") int enroll_id) {

 

                        EnrollData saveTo = null;

                        EnrollData dataFrom = null;

                        try {

                                   

                                    saveTo = edDao.selectById(enroll_id);

                                    if (saveTo == null)

                                                return new ResponseEntity<EnrollData>(new EnrollData(), HttpStatus.BAD_REQUEST);

 

                                    if (ed.isPresent()) {

                                                dataFrom = ed.get();

                                               

                                                if (dataFrom.getRealname() != null && saveTo.getRealname() != dataFrom.getRealname())

                                                            saveTo.setRealname(dataFrom.getRealname());

 

                                                if (dataFrom.getQq() != null && saveTo.getQq() != dataFrom.getQq())

                                                            saveTo.setQq(dataFrom.getQq());

 

                                                if (dataFrom.getSchool() != null && saveTo.getSchool() != dataFrom.getSchool())

                                                            saveTo.setSchool(dataFrom.getSchool());

 

                                                if (dataFrom.getTutor() != null && saveTo.getTutor() != dataFrom.getTutor())

                                                            saveTo.setTutor(dataFrom.getTutor());

 

                                                if (dataFrom.getOnline_id() != null && saveTo.getOnline_id() != dataFrom.getOnline_id())

                                                            saveTo.setOnline_id(dataFrom.getOnline_id());

 

                                                if (dataFrom.getStudy_note_link() != null && saveTo.getStudy_note_link() != dataFrom.getStudy_note_link())

                                                            saveTo.setStudy_note_link(dataFrom.getStudy_note_link());

 

                                                if (dataFrom.getStudy_aoth() != null && saveTo.getStudy_aoth() != dataFrom.getStudy_aoth())

                                                            saveTo.setStudy_aoth(dataFrom.getStudy_aoth());

 

                                                if (dataFrom.getExpected_start_date() != null && saveTo.getExpected_start_date() != dataFrom.getExpected_start_date())

                                                            saveTo.setExpected_start_date(dataFrom.getExpected_start_date());

 

                                                if (dataFrom.getHeard_us_from() != null && saveTo.getHeard_us_from() != dataFrom.getHeard_us_from())

                                                            saveTo.setHeard_us_from(dataFrom.getHeard_us_from());

 

                                                if (dataFrom.getClass_name() != null && saveTo.getClass_name() != dataFrom.getClass_name())

                                                            saveTo.setClass_name(dataFrom.getClass_name());

 

                                                saveTo.setUpdated_at(System.currentTimeMillis());

 

                                                if (edDao.update(saveTo))

                                                            return new ResponseEntity<EnrollData>(saveTo, HttpStatus.OK);

                                    }

                        } catch (Exception e) {

                        }

                        return new ResponseEntity<EnrollData>(new EnrollData(), HttpStatus.BAD_REQUEST);

            }

 

            @RequestMapping(value = "/enrollment/{enroll_id}/", method = RequestMethod.DELETE)

            public ResponseEntity<Integer> deleteEnrollmentById(@PathVariable("enroll_id") Optional<Integer> enroll_id) {

                        try {

                                    if (enroll_id.isPresent() && edDao.deleteById(enroll_id.get())) {

                                                return new ResponseEntity<Integer>(enroll_id.get(), HttpStatus.OK);

                                    }

                        } catch (Exception e) {

                        }

                        return new ResponseEntity<Integer>(enroll_id.get(), HttpStatus.NOT_FOUND);

            }

 

}

 

 

使用了Jackson2 来处理把 Java object 变成 JSON,以及把JSON 变成 Java object。插件太智能,maven引入就能用,结果还没太懂如何使用。


使用POSTMAN 测试

1)使用GET /enrollment/ 获取所有的enrollment


2)用POST 到 /enrollment/ update一条数据。需要POST 一个 JSON,里面包含数据。如果插入成功,返回201 CREATED。


3)PUT 不支持,如果PUT 返回405 METHOD NOT ALLOWED error。


4) DELETE,同样不支持 在/enrollment/发DELETE,如果允许的话,应该是批量删除。


5) GET /enrollment/{enroll_id}/ 获得一条报名信息


6)POST /enroll/{id} 不支持 ,不可能在已知的id上创建新的record,返回405 error


7)PUT /enrollment/{id}/ 更新一个已有数据,如果成功upload,会返回更新后的数据(JSON格式)



8)DELETE /enrollment/{id}/ 成功删除会返回id


(因为spring里面带了链接信息就不发到GIT了。。。。)


我使用了Tomcat。



返回列表 返回列表
评论

    分享到