java - Spring:将@RequestBody 注入(inject)@Bean

标签 java spring spring-mvc dependency-injection autowired

我想在 Controller 的 update(...) 执行时/执行之前填充 requestScopedBean.userDetails

在我的 spring web 项目中,我有基于 java 的MyConfiguration extends WebMvcConfigurerAdapter,其中我有:

@Bean(name = "requestScopedBean")
@Scope(value = "prototype")
public RequestScopedBean requestScopedBean() {
    return new RequestScopedBean();
}

RequestScopedBean.java 中:

public class RequestScopedBean {

    public @Autowired UserDetails userDetails;

    public void setUserDetails(UserDetails pUserDetails){
        userDetails = pUserDetails;
    }

    @Override
    public String toString() {
        return "" + (userDetails != null) ;
    }
}

UserDetails.java

public class UserDetails {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我有 UsersController.java 包含:

@RestController
@RequestMapping("/users")
@Scope("request")
public class UsersController {

    @Autowired
    private RequestScopedBean requestScopedBean;

     @RequestMapping(
         value = {"{uid}" }, 
         method = RequestMethod.PUT, 
         produces = MediaType.APPLICATION_JSON_UTF8_VALUE
    )
    public ResponseEntity<?> update(
        @PathVariable String uid,
        @RequestBody UserDetails pUserDetails
    ) throws Exception {

        // LOCATION 1

        // return ResponseEntity;
    }
}

我该怎么做才能在 LOCATION 1 处,requestScopedBean.userDetails 保存在此函数中作为参数接收的变量 pUserDetails

我正在寻找一些基于setter 的依赖注入(inject)一些基于工厂方法的注入(inject),但如果其他方法更合适,请告知。谢谢

最佳答案

如果您只想保留来自 Request 的 UserDetails 对象,只需将该对象设置为 requestScopedBean。

@RestController
@RequestMapping("/users")
@Scope("request")
public class UsersController {

    @Autowired
    private RequestScopedBean requestScopedBean;

     @RequestMapping(
         value = {"{uid}" }, 
         method = RequestMethod.PUT, 
         produces = MediaType.APPLICATION_JSON_UTF8_VALUE
    )
    public ResponseEntity<?> update(
        @PathVariable String uid,
        @RequestBody UserDetails pUserDetails
    ) throws Exception {

        requestScopedBean.setUserDetails(pUserDetails);

        // return ResponseEntity;
    }
}

除此之外,我建议您不要在 RequestScopedBean 的 UserDetails 对象中 Autowiring

public class RequestScopedBean {

    public UserDetails userDetails;

    public void setUserDetails(UserDetails pUserDetails){
        userDetails = pUserDetails;
    }

    @Override
    public String toString() {
        return "" + (userDetails != null) ;
    }
}

请告诉我,您在使用这种方法时遇到的问题是什么。

关于java - Spring:将@RequestBody 注入(inject)@Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737966/

相关文章:

java - 如何在运行时更改xml中的spring bean属性值?

hibernate - 访问 Spring MVC 应用程序时出错

java - 从 Thymeleaf 中的嵌套列表绑定(bind)表单

java - 如何使用 Selenium 获取 css 类名?

java - 为什么 @JoinTable 上的 JPA (Hibernate) 外键定义不起作用?

java - 如何从 Google 应用引擎中的 key 返回自动生成的数字 ID?

java - JUnit 测试 - 对模拟对象进行 Assets 或验证(或两者)?

java - 如何在 Spring 中使用 MongoRepository 在 mongodb 中 findOneAndDelete

spring - JPA 中通过 ID 和版本删除对象

Java:不添加负值