关于控制器
- @Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
- @RestController: 是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。(如果返回的404,看一下是不是没使用@ResponseBody这个注解)
- @scope bean的作用域注解,单例多例使用. ``` @Scope(“singleton”) @Data public class User { private static final long serialVersionUID = 1348665906085238496L; private Long id; private String username; private String email; private String phone; private String qq; private Date createTime; private Date updateTime; }
例如上方代码表示- singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。- prototype : 每次请求都会创建一个新的 bean 实例。- request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。- session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。<a name="XigId"></a>#### @Component,@Repository,@Service, @Controller如果不知道组件属于哪一层可以使用component<br />@Repository<br />一般用于操作数据库的dao层,即mapper.<br />和@mapper组合使用可以解决@atuowird出红线报错的问题.<br />例如下方,因为mapper是mybaits的注解,
@Component
@Mapper
public interface ProductsMapper extends BaseMapper
* 插入产品信息** @param* @return* @author alpha* @version 0.1.0* @date*/int insertProducts(Products products);/*** 根据id删除产品信息** @param* @return* @author alpha* @version 0.1.0* @date*/int deleteProducts(Long productid);/*** 根据id更新产品信息* @param* @return* @author alpha* @version 0.1.0* @date*/int updateProducts(Long productid);/*** 查询产品数据集合* @param* @return* @author alpha* @version 0.1.0* @date*/@Select(value ="SELECT * FROM products")
public List
}
@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。<br />@Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。<br />配置类<a name="R4sim"></a>#### @Configuration声明该类为配置类.<br />示例,与application.properties,application.yaml这类配置文件灵活组合使用.
@Configuration
public class ExampleConfiguration {
@Value("com.mysql.jdbc.Driver")private String driverClassName;@Value("jdbc://xxxx.xx.xxx/xx")private String driverUrl;@Value("${root}")private String driverUsername;@Value("123456")private String driverPassword;@Bean(name = "dataSource")public DataSource dataSource() {BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName(driverClassName);dataSource.setUrl(driverUrl);dataSource.setUsername(driverUsername);dataSource.setPassword(driverPassword);return dataSource;}@Beanpublic PlatformTransactionManager transactionManager() {return new DataSourceTransactionManager(dataSource());}
}
<a name="Cyav5"></a>#### 3.1. GET 请求@GetMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.GET)
@GetMapping(“/users”)
public ResponseEntity> getAllUsers() {
return userRepository.findAll();
}
<a name="cNNGJ"></a>#### 3.2. POST 请求@PostMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.POST)<br />关于@RequestBody注解的使用,在下面的“前后端传值”这块会讲到。
@PostMapping(“/users”)
public ResponseEntity
<a name="tc88V"></a>#### 3.3. PUT 请求@PutMapping("/users/{userId}") 等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
@PutMapping(“/users/{userId}”)
public ResponseEntity
<a name="Ji42l"></a>#### 3.4. **DELETE 请求**@DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
@DeleteMapping(“/users/{userId}”) public ResponseEntity deleteUser(@PathVariable(value = “userId”) Long userId){ …… }
<a name="J701B"></a>#### 3.5. **PATCH 请求**一般实际项目中,我们都是 PUT 不够用了之后才用 PATCH 请求去更新数据。
@PatchMapping(“/profile”) public ResponseEntity updateStudent(@RequestBody StudentUpdateRequest studentUpdateRequest) { studentRepository.updateDetail(studentUpdateRequest); return ResponseEntity.ok().build(); }
前后端传参<a name="tSRoD"></a>#### @PathVariable 和 @RequestParam
@GetMapping(“/klasses/{klassId}/teachers”)
public List
如果我们请求的 url 是:/klasses/{123456}/teachers?type=web<br />那么我们服务获取到的数据就是:klassId=123456,type=web。<a name="G68WB"></a>#### 4.2. @RequestBody用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且**Content-Type 为 application/json** 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。<br />我用一个简单的例子来给演示一下基本使用!<br />我们有一个注册的接口:
@PostMapping(“/sign-up”) public ResponseEntity signUp(@RequestBody @Valid UserRegisterRequest userRegisterRequest) { userService.save(userRegisterRequest); return ResponseEntity.ok().build(); }
UserRegisterRequest对象:
@Data @AllArgsConstructor @NoArgsConstructor public class UserRegisterRequest { @NotBlank private String userName; @NotBlank private String password; @FullName @NotBlank private String fullName; } ```
