sproot 注解学习记录 (接口层2个实现类的话 要给实现类起名字的方法 去调用)
常用注解解说: https://www.bilibili.com/video/BV1y7411j78K?p=2&spm_id_from=pageDriver
返回前端字符
接收前端参数 @RequestParam --------------get请求
uri例子: /parm2/?id=333
defaultValue 为默认值 defaultValue = "id的默认值"
required 为是否可为空 required = false 可以为空前端不传值
接收前端参数 @PathVariable
url例子: /path/2
第一个方法不写路径,那么可以直接请求访问:
--------post请求
后计: 后面发现 user 可以随便给 他只是形参,然后把它传到对应要调用的方法
注意: User这个类 我是用了 lombok 、给类加了有参构造和无参构造 (超哥说 请求的时候 参数会自动映射到这个类 然后拿到对应的变量)
lombok注解 可以看这个 https://blog.csdn.net/u011308294/article/details/78627560
@ToString
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
int age;
String name;
}
例子:
后记:
如果前端post可以随意传json过来那么这么写
@RequestMapping("/xxx")
public Object deleteKnowledge(@RequestBody(required = false) JSONObject json){
System.out.println(json);
//这里text的值也是json 所以用getJSONObject
String content = json.getJSONObject("text").get("content").toString().replaceAll(" ", "");
System.out.println(content);
return content;
}
参考: https://www.cnblogs.com/kaibindirver/p/14961473.html
另外一篇 https://www.cnblogs.com/kaibindirver/p/15394513.html
使用中问题记录
UserController.java
@RestController
@RequestMapping ( "BB" )
public class UserController {
// 新增数据
@Qualifier ( "ee" )
@Autowired
private UserServer userServer;
@GetMapping ( "{id}" )
public User AA( @PathVariable ( "id" ) int id){
return userServer.get();
}
}
UserServer.java
public interface UserServer {
public default User get(){
User user= new User( 18 , "张三" );
System.out.println( "get User" +user);
return user;
}
public User getById( int id);
}
UserServerimpl.java
@Service ( "ee" )
public class UserServer2impl implements UserServer {
@Override
public User getById( int id) {
User user= new User(id, "张三" );
System.out.println( "get User" +user);
return user;
}
}
超哥说 impl层是实现业务逻辑的
UserServerimpl 中 @Service("ee") 可以给这个实现类命名为ee
然后控制层中
@Qualifier("ee")
@Autowired
private UserServer userServer;
另外一种写法是用
@Resource(name="ee")
private UserServer userServer;
如果实现类没有给他另起名字,那么就是 @Resource(name="userServerimpl") 注意首字母要小写
Qualifier 是指定哪个实现类
因为用Autowired是从bean里面找注册的类,然后下面变量用的是接口层 UserServer ,他回自动去找 接口层对应的实现类有哪些,实现类只有一个 就不用@Qualifier("ee")指定系统去找实现的类,如果接口有1个以上的实现类就要加上
@Qualifier("ee")指定要使用那个实现类了
然后再调用接口层 get()方法,他会自动去找重载实现接口get()方法的实现类
如果接口层要有默认的方法 要加 default 关键词
@Value()注解的使用
可以获取配置文件里面的变量
application.properties配置文件
#自定义变量
local.username=lucax
contro层里面可以调用
@Value("123")
private String username;
@Value("${local.username}")
private String username;
后记:
@ResponseBody
@ResponseBody,一般是使用在单独的方法上的,需要哪个方法返回json数据格式,就在哪个方法上使用,具有针对性。
@RestController
@RestController,一般是使用在类上的,它表示的意思其实就是结合了@Controller和@ResponseBody两个注解。
接收请求头信息去这里看看
https://www.cnblogs.com/kaibindirver/p/15398815.html
请求ip啥的 下面这篇文章有
https://blog.csdn.net/qq_41767337/article/details/89144733
后记:
前端传一个list给后端的方法
后记:
请求注解可以设置多个uri
@GetMapping({"/ttest","/"})
public int aa(){
return 123;
}
后记:
全局可配置uri添加路径
在配置文件中加上
# 应用名称
spring:
mvc:
servlet:
path: "/xxx"
原来请求地址 /demo
加了以后 请求地址 /xxx/demo