Spring Boot进阶-Web进阶

项目代码路径

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;

@Entity
public class Girl {
	
	@Id
	@GeneratedValue
	private 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;  
  
@RestController  
public class GirlController {  
      
    @Autowired  
    private GrilRepository girlRepository;  
      
    @Autowired  
    private 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  
@Component  
public 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();  
        //url  
        logger.info("url={}",request.getRequestURI());//打印的内容,会替换{}  
        //请求方式  
        logger.info("method={}",request.getMethod());  
        //ip  
        logger.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;  
  
@ControllerAdvice  
public class ExceptionHandle {  
      
    private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);  
    /** 
     * 捕获异常类 
     * @return 
     */  
    @ExceptionHandler(value=Exception.class)  
    @ResponseBody  
    public 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;  
  
@Service  
public class GirlService {  
    @Autowired  
    private 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  
@AutoConfigureMockMvc  
public class GirlServiceTests {  
      
    @Autowired  
    private MockMvc mvc;  
      
    @Test  
    public void test() throws Exception{  
        mvc.perform(MockMvcRequestBuilders.get("/girls"))  
        .andExpect(MockMvcResultMatchers.status().isOk())//返回值状态 ok  
        .andExpect(MockMvcResultMatchers.content().string("abc"));//返回值abc  
    }  
  
}  

猜你喜欢

转载自blog.csdn.net/Wang_WY/article/details/80482789