乐观男孩
Error
处理SpringMVC外的Exception 或SpringMVC没有处理的Exception
代码
admin Mapping:
@RequestMapping("/admin")
@ResponseBody
public String admin(@RequestParam(value = "key",required = false)String key){
if ("admin".equals(key))
return "hello admin";
else
throw new IllegalArgumentException("key error");
}
输入admin?key=admin
输入其他:
Error Mapping:
//Exception的处理
@ExceptionHandler
@ResponseBody
public String error(Exception e){
return "error: "+e.getMessage();
}
加上错误处理之后
IOC
@Service
@Autowired
代码:
1.Controller
import com.nowcoder.toutiao.service.TouTiaoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
//IOC Controller
@Controller
public class IocController {
@Autowired
private TouTiaoService ttService;
@RequestMapping("/ttservice")
@ResponseBody
public String ttService(){
String ttmessage= ttService.say();
return ttmessage;
}
}
2.Service:
import org.springframework.stereotype.Service;
@Service
public class TouTiaoService {
public String say(){
return "this is form toutiaoService";
}
}
AOP 面向切面编程
@Aspect
@Component //(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
@JoinPoint
@Before(execution(*com.nowcoder.toutiao.controller.*Controller.*(..)))
@After(execution(*com.nowcoder.toutiao.*controller.*Controller.*(..)))
代码:
1。LogAspect:
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component //(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
// 执行所有方法之前都调用这个方法
@Before("execution(* com.nowcoder.toutiao.controller.IndexController.*(..))")
public void beforeMethod(JoinPoint joinPoint){
//joinPoint 切点
StringBuilder sb =new StringBuilder();
for (Object arg:joinPoint.getArgs()
) {
sb.append("arg: "+arg.toString()+" | ");
}
logger.info("before method :"+sb.toString());
}
// 执行所有方法之后都调用这个方法
@After("execution(* com.nowcoder.toutiao.controller.IndexController.*(..))")
public void afterMethod(JoinPoint joinPoint){
logger.info("after");
}
}
2。Controller
@RequestMapping(path={"/profile/{groupId}/{userId}"})
@ResponseBody
public java.lang.String profile(@PathVariable("groupId") String groupId,
@PathVariable("userId") int userId ,
@RequestParam(value="type",defaultValue = "1") String type,
@RequestParam(value = "key",defaultValue = "nowcoder")String key){
return String.format("Group:{%s},User:{%d},Type:{%s},Key:{%s}",groupId,userId,type,key);
}