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

posted @ 2021-08-23 13:17  凯宾斯基  阅读(176)  评论(1编辑  收藏  举报