package org.xmx0632.deliciousfruit.api.v1; import java.util.Set; import javax.servlet.ServletRequest; import javax.validation.ConstraintViolation; import javax.validation.Validator; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springside.modules.beanvalidator.BeanValidators; import org.springside.modules.mapper.BeanMapper; import org.xmx0632.deliciousfruit.api.v1.bo.LoginResponse; import org.xmx0632.deliciousfruit.api.v1.bo.MobileUser; import org.xmx0632.deliciousfruit.api.v1.bo.Result; import org.xmx0632.deliciousfruit.api.v1.bo.UpdatePwdRequest; import org.xmx0632.deliciousfruit.api.v1.bo.UpdatePwdResponse; import org.xmx0632.deliciousfruit.api.v1.bo.UpdateRequest; import org.xmx0632.deliciousfruit.api.v1.bo.UpdateResponse; import org.xmx0632.deliciousfruit.api.v1.helper.PasswordHelper; import org.xmx0632.deliciousfruit.api.v1.helper.WebHelper; import org.xmx0632.deliciousfruit.entity.UserAccount; import org.xmx0632.deliciousfruit.service.UserAccountService; /** * UserAccount的API的Controller. * * @author xmx0632 */ @Controller @RequestMapping(value = "/api/v1/user") public class UserAccountApiController { private static Logger log = LoggerFactory .getLogger(UserAccountApiController.class); @Autowired private UserAccountService userAccountService; @Autowired private Validator validator; @RequestMapping(value = "/login", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<LoginResponse> login(ServletRequest request) { UserAccount userAccount = WebHelper.getCurrentUser(request); log.debug("UserAccount:{}", userAccount); LoginResponse response = new LoginResponse(); response.setResult(Result.SUCCESS_RESULT); response.setUser(BeanMapper.map(userAccount, MobileUser.class)); log.debug("response:{}", response); return new ResponseEntity<LoginResponse>(response, HttpStatus.OK); } @RequestMapping(value = "/update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<UpdateResponse> update( @RequestBody UpdateRequest updateRequest, ServletRequest request) { UserAccount userAccount = WebHelper.getCurrentUser(request); log.debug("UserAccount:{}", userAccount); log.debug("Request:{}", updateRequest); // 用UpdateRequest决定哪些属性可以被更新 BeanMapper.copy(updateRequest, userAccount); Set<ConstraintViolation<UserAccount>> failures = validator .validate(userAccount); if (!failures.isEmpty()) { UpdateResponse response = UpdateResponse .createFailResponse("invalid property"); response.setErr(BeanValidators.extractPropertyAndMessage(failures)); log.debug("response:{}", response); return new ResponseEntity<UpdateResponse>(response, HttpStatus.OK); } // UpdateRequest userAccount.setCustomerName(updateRequest.getCustomerName()); userAccount.setEmail(updateRequest.getEmail()); userAccount.setSex(updateRequest.getSex()); userAccount.setMobile(updateRequest.getMobile()); userAccountService.saveUserAccount(userAccount); UpdateResponse response = new UpdateResponse(); response.setResult(Result.SUCCESS_RESULT); log.debug("response:{}", response); return new ResponseEntity<UpdateResponse>(response, HttpStatus.OK); } @RequestMapping(value = "/changePwd", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<UpdatePwdResponse> changePwd( @RequestBody UpdatePwdRequest updatePwdRequest, ServletRequest request) { UserAccount userAccount = WebHelper.getCurrentUser(request); log.debug("UserAccount:{}", userAccount); log.debug("Request:{}", updatePwdRequest); if (StringUtils.isNotBlank(updatePwdRequest.getPwd())) { String encodedPassword = PasswordHelper.md5(updatePwdRequest .getPwd()); userAccount.setPassword(encodedPassword); } userAccountService.saveUserAccount(userAccount); UpdatePwdResponse response = new UpdatePwdResponse(); response.setResult(Result.SUCCESS_RESULT); log.debug("response:{}", response); return new ResponseEntity<UpdatePwdResponse>(response, HttpStatus.OK); } private UserAccount getCurrentUser(ServletRequest request) { return WebHelper.getCurrentUser(request); } }