如何使用spring会话为多个请求初始化一个对象?

hs1rzwqc  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(336)

我有一个应用程序,需要三段数据。
例子:

public class RequestForm {
    private final String a;
    private final String b;
    private final String c;
}

我想一个接一个地获取对这个对象字段的请求,并在会话中存储对象之后立即初始化它。
一个有点混乱的例子:

@PostMapping(URL+"/1")
    public ResponseEntity<String> enteredA(@RequestBody String a, HttpSession httpSession) {
        httpSession.setAttribute("a", a);
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @PostMapping(URL+"/2")
    public ResponseEntity<String> enteredB(@RequestBody Stirng b, HttpSession httpSession) {
        log.info("b : {} ", b);
        httpSession.setAttribute("b", b);

        return new ResponseEntity<>(HttpStatus.OK);
    }

    @PostMapping(URL+"/3")
    public ResponseEntity<String> enteredC(@RequestBody String c, HttpSession httpSession) {
        log.info("c : {} ", c);
        httpSession.setAttribute("c", c);

        String a = (String) httpSession.getAttribute("a");
        String b = (String) httpSession.getAttribute("a");
        String c = (String) httpSession.getAttribute("a");
        save(new RequestForm(a, b, c);

        return new ResponseEntity<>(HttpStatus.OK);
    }

然而,有一种强烈的感觉,你不应该这样做。
我听说你可以用@sessionattributes之类的东西。
顺便说一句,许多示例对每个请求初始化一个对象并将其存储在会话中。
有没有办法为多个请求初始化一个对象?我正在开发SpringBoot2.4。
拜托。谢谢您。?

70gysomp

70gysomp1#

spring框架支持bean的五个作用域。你可以用
session scope here.this scope一个bean定义到一个http会话。仅在支持web的spring applicationcontext上下文中有效。
使您的控制器会话具有作用域。然后,您可以简单地示例化要作为控制器的成员变量存储在会话范围中的对象。
您可以创建一个会话范围的组件,并将其注入控制器中,如下所示:

@Component
@Scope("session")
public class RequestForm {
    private final String a;
    private final String b;
    private final String c;
}

控制器类

@Controller
@Scope("request")
public class SessionController
{
  @Autowired
 private RequestForm requestForm;

// Handler mapping methods
}

相关问题