java 初始化布尔值以在每个API调用中使用

zqdjd7g9  于 2022-12-28  发布在  Java
关注(0)|答案(2)|浏览(113)

我有一个服务如下所示

public interface SomeService{

@GetMapping("/someapi")
public Object getData();
}

我有如下所示impl类
x一个一个一个一个x一个一个二个x
我希望在每次调用"/someapi "时,isSomeCondition初始设置为false,然后在执行callSomeMethod时更改。我上面的设置似乎不起作用,因为全局变量isSomeCondition是无状态bean。有什么替代方法吗?

os8fio9y

os8fio9y1#

如果你需要状态,那么就引入状态。为每个请求创建一个有状态的对象:

public class ServiceImpl{
  public Object getData(){
    final DataGetter getter = new DataGetter();
    return getter.getData();
  }

  static class DataGetter {
    private boolen isSomeCondition;

    public Object getData(){
      callSomeMethod();
      if(isSomeCondition) {
        //do something
      } else {
        //do some other
      }
    }

    public void callSomeMethod(){
      if(someCondition) {
        //do something
      } else {
        //set isSomeCondition to true
        isSomeCondition=true;
      }
    }
  }
}

由于您使用的是Spring,因此更改bean范围也是一个选项:

@RequestScope
public class ServiceImpl {
  // ...
}
deyfvvtc

deyfvvtc2#

尝试如下所示的方法:不要将isSomeCondition作为全局变量,而是将其作为局部变量,并将其传递给方法。

public class ServiceImpl{

   public Object getData(){
   private boolen isSomeCondition;
   isSomeCondition = callSomeMethod(isSomeCondition);
   if(isSomeCondition)
   //do something
   else
  //do some other
  }

在这里根据您的条件,您可以设置它和返回。

public boolean callSomeMethod(){
    if(someCondition)
    //do something
    else
   //set isSomeCondition to true
    isSomeCondition=true;
   return isSomeCondition;
  }

相关问题