Controller注解记录

本文详细介绍了 Spring MVC 框架中的关键注解及其用途,包括 @RestController、@RequestMapping、@CrossOrigin、@Resource、@PostMapping 和 @GetMapping 等,并解释了它们如何帮助开发者简化 RESTful API 的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@RestController 
代表所有的接口返回都以json格式返回。代替了每个请求方法写一个@ResponseBody


@RequestMapping("***") 请求定位 在controller类上面写,表示请求方法的上一级 例如:/ user  相应的下面的请求方法 可以是 login  或者 register 访问就是user/login
我个人理解就是清晰分类的作用


@CrossOrigin(origins = "*", maxAge = 3600)
跨域请求的注解


@Resource 实例化注解  例如:在controller中获取service实例


@PostMapping(value = "login") @GetMapping(value = "login")


@RequestMapping(value = "login")
加在请求方法上 表示下级的地址 例如 :类上方的RequestMapping的下级,user/login 的 login定位 而 post 和getmapping 是这个RequestMapping的简写 ,因为RequestMapping是可以指定psot get的


@ResponseBody 是在请求方法的上面写的 表示返回以json格式的数据,如果类上写了@RestController  则 所有请求方法都可以忽略不写


@RequestBody是请求的参数。form表单的话 对应写name 就可以拿到值,就可以使用实体类来接受对象 也可以获取单个的数值 或字符串 或json





其他注解 @Component @Repository@Service  @Controller

主要把经典的三层架构的 交给spring管理

在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成

Service层,Controller层等等的注入配置.使用过程中,在Service层中的实现类头上加@Compopnet注解,在Controller类头加@Controller注解,便完成了配置。例如在

Controller中当我们调用某个Service时就不需要Set方法了,直接通过@Autowried 注解对Service对象进行注解即可:例如

在Controller中:

@Controller
@RequestMapping("/test")
public class ExampleController { @Autowired private ExampleService service; }

在Service中

@Component 
public class ExampleServiceImpl Implements ExampleService {
     @Autowired  
     private ExampleDao exampleDao;       
}

Spring 中的XML配置:

<!-- 自动扫描service,controller组件 -->
<context:component-scan base-package="com.example.service.*"/>
<context:component-scan base-package="com.example.controller.*"/>




在软件开发中,尤其是基于Spring框架的应用程序里,通过为Controller层添加自定义注解记录操作日志是一种常见的需求。这种技术可以帮助开发者跟踪用户的请求、分析系统性能以及排查潜在问题。 ### 实现步骤 1. **创建自定义注解** 首先需要定义一个新的注解用于标记哪些方法的操作应该被记录下来。 ```java @Retention(RetentionPolicy.RUNTIME) // 注解会在运行时保留 @Target(ElementType.METHOD) // 表明该注解只能应用于方法上 public @interface LogOperation { String value() default ""; // 可以在这里设置一些额外的信息字段 } ``` 2. **编写AOP切面处理逻辑** 使用Spring AOP(面向方面编程),我们可以捕获所有带有我们刚刚创建的`LogOperation`注解的方法,并在此基础上实现具体的日志记录功能。 ```java @Component @Aspect public class LogAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Around("@annotation(logOperation)") public Object logMethod(ProceedingJoinPoint joinPoint, LogOperation logOperation) throws Throwable { long startTime = System.currentTimeMillis(); try { Object result = joinPoint.proceed(); // 执行目标方法 recordSuccessLog(joinPoint, logOperation, startTime); return result; } catch (Throwable e){ recordFailureLog(joinPoint, logOperation, startTime, e); throw e; // 如果希望继续抛出异常给外层,则可以加上这一句 } } private void recordSuccessLog(ProceedingJoinPoint joinPoint, LogOperation logOperation, Long startTime){ Signature signature = joinPoint.getSignature(); logger.info("成功执行了 {} 方法 - 描述: {}, 耗时: {} 毫秒", signature.getName(), logOperation.value(), System.currentTimeMillis()-startTime ); } private void recordFailureLog(ProceedingJoinPoint joinPoint, LogOperation logOperation, Long startTime, Throwable e){ Signature signature = joinPoint.getSignature(); logger.error("失败执行了 {} 方法 - 描述: {}, 耗时: {} 毫秒", signature.getName(), logOperation.value(), System.currentTimeMillis()-startTime ,e); } } ``` 此代码片段会拦截每一个加有 `@LogOperation` 的方法并自动打印相应的信息到控制台或者文件中去。 3. **使用示例** 接下来就是在实际项目里面应用它了: ```java @RestController @RequestMapping("/example") public class ExampleController { @GetMapping("/{id}") @LogOperation("获取用户详情") // 自定义描述文字 public ResponseEntity<User> getUserById(@PathVariable Integer id){ User user = userService.findById(id); if(user == null) return new ResponseEntity<>(HttpStatus.NOT_FOUND); return new ResponseEntity<>(user, HttpStatus.OK); } } ``` 当访问上述API路径 `/example/{someId}` 时,“获取用户详情”将会作为一条新纪录保存至指定位置供后续审查之用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值