关于控制器
- @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;
}
@Bean
public 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; } ```