package org.quickbundle.modules.message.rest; import java.net.URI; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.validation.ConstraintViolation; import javax.validation.Validator; import org.quickbundle.base.web.page.RmPageVo; import org.quickbundle.modules.message.IRmMessageConstants; import org.quickbundle.modules.message.service.RmMessageService; import org.quickbundle.modules.message.vo.RmMessageVo; import org.quickbundle.modules.message.web.RmMessageController; import org.quickbundle.third.spring.http.RmResponseEntityFactory; import org.quickbundle.tools.helper.RmJspHelper; import org.quickbundle.tools.helper.RmPopulateHelper; import org.quickbundle.tools.helper.RmVoHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; 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.bind.annotation.ResponseStatus; import org.springframework.web.util.UriComponentsBuilder; /** * list GET /api/rmmessage * get GET /api/rmmessage/{id} * insert action POST /api/rmmessage * update action PUT /api/rmmessage/{id} * delete action DELETE /api/rmmessage/{id} * delete multi action POST /api/rmmessage/delete * batch insert update POST /api/rmmessage/batch * * @author 白小勇 */ @Controller @RequestMapping(value = "/api/message") public class RmMessageRestController implements IRmMessageConstants { @Autowired private RmMessageService rmMessageService; @Autowired private Validator validator; /** * 获取多条记录 * @param request * @return */ @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public Map<String, Object> list(HttpServletRequest request) { String queryCondition = RmMessageController.getQueryCondition(request); //从request中获得查询条件 RmPageVo pageVo = RmJspHelper.transctPageVo(request, rmMessageService.getCount(queryCondition)); String orderStr = RmJspHelper.getOrderStr(request); //得到排序信息 List<RmMessageVo> beans = rmMessageService.list(queryCondition, orderStr, pageVo.getStartIndex(), pageVo.getPageSize()); //按条件查询全部,带排序 Map<String, Object> result = new HashMap<String, Object>(); result.put(RM_JSON_TOTAL_COUNT, pageVo.getRecordCount()); result.put(REQUEST_BEANS, beans); return result; } /** * 获得单条记录 * @param id * @return */ @RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<?> get(@PathVariable("id") Long id) { RmMessageVo task = rmMessageService.get(id); if (task == null) { return new ResponseEntity<RmMessageVo>(HttpStatus.NOT_FOUND); } return new ResponseEntity<RmMessageVo>(task, HttpStatus.OK); } /** * 插入单条记录,使用服务端管理的ID号 * @param vo * @param uriBuilder * @return */ @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<?> insert(@RequestBody RmMessageVo vo, UriComponentsBuilder uriBuilder) { //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息. Set<ConstraintViolation<RmMessageVo>> failures = validator.validate(vo); if (!failures.isEmpty()) { return RmResponseEntityFactory.build(failures, HttpStatus.BAD_REQUEST); } rmMessageService.insert(vo); //按照Restful风格约定,创建指向新任务的url, 也可以直接返回id或对象. Long id = vo.getId(); URI uri = uriBuilder.path("/api/message/" + id).build().toUri(); HttpHeaders headers = new HttpHeaders(); headers.setLocation(uri); return new ResponseEntity<HttpHeaders>(headers, HttpStatus.CREATED); } /** * 修改单条记录 * @param vo * @return */ @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<?> update(@RequestBody RmMessageVo vo) { //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息. Set<ConstraintViolation<RmMessageVo>> failures = validator.validate(vo); if (!failures.isEmpty()) { return RmResponseEntityFactory.build(failures, HttpStatus.BAD_REQUEST); } //保存 rmMessageService.update(vo); //按Restful约定,返回204状态码, 无内容. 也可以返回200状态码. return new ResponseEntity<String>(HttpStatus.NO_CONTENT); } /** * 删除单条记录 * @param id */ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @ResponseStatus(HttpStatus.NO_CONTENT) public void delete(@PathVariable("id") Long id) { rmMessageService.delete(id); } /** * 删除单条记录 * @param id */ @RequestMapping(value = "/delete", method = RequestMethod.POST) @ResponseBody public int delete(HttpServletRequest request) { Long[] ids = RmJspHelper.getLongArrayFromRequest(request, REQUEST_IDS); //从request获取多条记录id if (ids != null && ids.length != 0) { return rmMessageService.delete(ids); //删除多条记录 } return 0; } /** * 批量保存,没有主键的insert,有主键的update * @param request * @return */ @RequestMapping(value = "batch", method = RequestMethod.POST) public ResponseEntity<Map<String, int[]>> batchInsertUpdate(HttpServletRequest request) { List<RmMessageVo> lvo = RmPopulateHelper.populateAjax(RmMessageVo.class, request); for(RmMessageVo vo : lvo) { if(vo.getId() != null) { RmVoHelper.markModifyStamp(request, vo); } else { RmVoHelper.markCreateStamp(request, vo); } } int[] sum_insert_update = rmMessageService.insertUpdateBatch(lvo.toArray(new RmMessageVo[0])); Map<String, int[]> result = new HashMap<String, int[]>(); result.put(EXECUTE_ROW_COUNT, sum_insert_update); return new ResponseEntity<Map<String, int[]>>(result, HttpStatus.OK); } }