簡體   English   中英

Spring:將@RequestBody注入@Bean

[英]Spring: injecting @RequestBody into @Bean

我想在我的控制器update(...)執行/執行之前填充requestScopedBean.userDetails

在我的春季網絡項目中,我有基於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 1requestScopedBean.userDetails保存在此函數中接收的變量pUserDetails作為參數。

我正在尋找一些基於setter的依賴注入一些基於工廠方法的注入,但請告知其他方法是否更合適。 謝謝

如果您只想保留來自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對象中使用Autowire

public class RequestScopedBean {

    public UserDetails userDetails;

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

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

請告訴我,您使用此方法遇到的問題是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM