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

项目代码路径

http://download.youkuaiyun.com/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
	}

}



可以加我微信


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值