慕课网-Spring Boot进阶之Web进阶

来源:互联网 发布:软件自学网cad2012 编辑:程序博客网 时间:2024/06/05 12:42

项目代码路径

http://download.csdn.net/download/fulq1234/9996291

2-0 表单验证



Girl.java


package com.imooc.domain;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.validation.constraints.Min;@Entitypublic class Girl {@Id@GeneratedValueprivate Integer id;private String cupSize;@Min(value=18,message="未成年少女禁止入内")private Integer age;public Girl() {    }    public Girl(String cupSize, Integer age) {super();this.cupSize = cupSize;this.age = age;}   /**getter/setter方法**/ /**toString方法**/    }
GirlController.java

package com.imooc.controller;import java.util.List;import javax.validation.Valid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.DeleteMapping;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RestController;import com.imooc.domain.Girl;import com.imooc.domain.Result;import com.imooc.repository.GrilRepository;import com.imooc.service.GirlService;import com.imooc.util.ResultUtil;@RestControllerpublic class GirlController {@Autowiredprivate GrilRepository girlRepository;@Autowiredprivate GirlService girlService;/** * 查询所有女生列表 * @return */@GetMapping(value = "/girls")public List<Girl> girlList(){System.out.println("girlList");return girlRepository.findAll();}/** * 添加一个女生 * @param girl * @return */@PostMapping(value="/girls")public Result<Girl> girlAdd(@Valid Girl girl,BindingResult bindingResult){if(bindingResult.hasErrors()){return ResultUtil.error(1, bindingResult.getFieldError().getDefaultMessage());}return ResultUtil.success(girlRepository.save(girl));}/** * 查询一个女生 * @param id * @return */@GetMapping(value="/girls/{id}")public Girl girlFindOne(@PathVariable("id") Integer id){return girlRepository.findOne(id);}/** * 更新 * @param girl * @return */@PutMapping(value="/girls/{id}")public Girl girlUpdate(Girl girl){return girlRepository.save(girl);}/**     * 删除     */    @DeleteMapping(value="/girls/{id}")    public void girlDelete(@PathVariable("id") Integer id){        girlRepository.delete(id);    }    //通过年龄查询女生列表    @GetMapping(value="/girls/age/{age}")    public List<Girl> girlListByAge(@PathVariable("age") Integer age){        return girlRepository.findByAge(age);    }    @GetMapping(value="/girls/getage/{id}")    public void getAge(@PathVariable("id") Integer id) throws Exception{    girlService.getAge(id);    }}




2-1 使用AOP处理请求

HttpAspect.java

package com.imooc.aspect;import javax.servlet.http.HttpServletRequest;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;@Aspect@Componentpublic class HttpAspect {private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);//@Before("execution(public * com.imooc.controller.GirlController.girlList(..))")//只拦截girlList方法@Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")//拦截GirlController的所有方法public void log(){logger.info("111111111");}@Before("log()")public void before(JoinPoint jp){ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();//urllogger.info("url={}",request.getRequestURI());//打印的内容,会替换{}//请求方式logger.info("method={}",request.getMethod());//iplogger.info("ip={}",request.getRemoteAddr());//类方法logger.info("class_method={}",jp.getSignature().getDeclaringTypeName() + "," + jp.getSignature().getName());//com.imooc.controller.GirlController,girlList//参数logger.info("args={}",jp.getArgs());}@AfterReturning(returning="object",pointcut="log()")public void doAfterReturning(Object object){logger.info("response={}",object.toString());}@After("log()")//拦截GirlController的所有方法public void doAfter(){logger.info("222222222");}}



2-4 统一异常处理

Service中发生错误,后抛出异常,由ExceptionHandle统一处理


import com.imooc.enums.ResultEnum;//RuntimeException继承Exception ,spring只对继承RuntimeException的异常进行回滚public class GirlException extends RuntimeException {private Integer code;public GirlException(ResultEnum resultEnum){super(resultEnum.getMsg());this.code = code;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}}

ExceptionHandle.java 捕捉异常类

package com.imooc.handler;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import com.imooc.domain.Result;import com.imooc.exception.GirlException;import com.imooc.util.ResultUtil;@ControllerAdvicepublic class ExceptionHandle {private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);/** * 捕获异常类 * @return */@ExceptionHandler(value=Exception.class)@ResponseBodypublic Result handle(Exception e){if(e instanceof GirlException){GirlException girlException = (GirlException) e;return ResultUtil.error(girlException.getCode(), girlException.getMessage());}return ResultUtil.error(-1, "未知错误");}}

GirlService.java

package com.imooc.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.imooc.domain.Girl;import com.imooc.enums.ResultEnum;import com.imooc.exception.GirlException;import com.imooc.repository.GrilRepository;@Servicepublic class GirlService {@Autowiredprivate GrilRepository girlRepository;public void getAge(Integer id) throws Exception{Girl girl = girlRepository.findOne(id);Integer age = girl.getAge();if(age < 10){//返回“你还在上小学吧throw new GirlException(ResultEnum.PRIMARY_SCHOOL);}else if(age>10 && age<16){//返回”你可能在上初中throw new GirlException(ResultEnum.MIDDLE_SCHOOL);}}/**其它方法**/}




2-5 单元测试

package com.imooc;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;@RunWith(SpringRunner.class)@SpringBootTest@AutoConfigureMockMvcpublic class GirlServiceTests {@Autowiredprivate MockMvc mvc;@Testpublic void test() throws Exception{mvc.perform(MockMvcRequestBuilders.get("/girls")).andExpect(MockMvcResultMatchers.status().isOk())//返回值状态 ok.andExpect(MockMvcResultMatchers.content().string("abc"));//返回值abc}}



可以加我微信


原创粉丝点击