发表于: 2017-05-28 21:20:52
2 1213
今日完成
任务2主要是要做出REST API
首先要设计一下API
资源 | GET | POST | PUT | DELETE |
/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。
评论