我们正在构建一个与远程API通信的webapp。我想这样设计这个远程API的客户端:
def RemoteApi
constructor (username, password)
getCurrentUser() //implementation will use username and password
getEmployees() //implementation will use username and password
...
关键是,我想在构建期间将凭据传递给这个客户端,并让所有其他方法使用这些凭据。我的第二个要求是我希望这个RemotePi
实例在会话中。
我在这里发现了如何传递动态构造函数参数。
我在这里发现了如何创建会话属性。
但我想不出一种方法来结合这两种技术。据我所知,您必须在自己的类getter方法中实例化会话属性。这种类似getter的方法将无法访问表单的字段,因此此时我将无法传递凭据。
这是我卡住的地方:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import java.util.Map;
@Controller
@SessionAttributes("remoteClient")
public class LoginController {
@Value("${company.name}")
private String companyName;
@Autowired
private RemoteClient remoteClient;
@ModelAttribute("remoteClient")
public RemoteClient addRemoteClientToSession() {
return remoteClient; //how do initialize this with credentials in here?
}
@RequestMapping("/")
public String showLogin(Model model) {
model.addAttribute("credentials", new Credentials());
return "login";
}
@RequestMapping("/login")
public String login(@ModelAttribute("credentials") Credentials credentials, Map<String, Object> model) {
if (remoteClient.auth(companyName, credentials.getUsername(), credentials.getPassword())) {
model.put("fullname", remoteClient.findCurrentUser().getName());
return "projectView";
} else {
return "login";
}
}
}
更新:也许解决方案与这种技术有关。在此之前我不知道Model AndView
。
我在问题中链接到的文章确实有必要的技巧。我要做的是创建一个@Autowired
RemotePiFactory
,它有一个newInstance(Credentials)
方法,并将其传递给addObjectnewInstance
的实现可能最终会使用new
关键字。如果有人知道如何避免这个细节,我很想听听。
以下是根据我的需求调整的示例:
@Controller
@SessionAttributes("remoteApi")
public class SingleFieldController {
@Autowired
private RemoteApiFactory remoteApiFactory;
@RequestMapping(value="/single-field")
public ModelAndView singleFieldPage() {
return new ModelAndView("single-field-page");
}
@RequestMapping(value="/remember")
public ModelAndView rememberThought(@MethodAttribute("credentials") Credentials credentials) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("remoteApi", remoteApiFactory.newInstance(credentials));
modelAndView.setViewName("single-field-page");
return modelAndView;
}
}
1.如何通过参数化构造函数设置这些属性?? 类文件 > 我想通过传递参数构造函数的setter设置这些属性,但它没有设置这些属性 在这里,我想通过toString方法显示属性 }对象文件 为什么我无法通过构造函数设置这些属性?? public class Runnable{public static void main(String[]args){Product p1=新产品(“pc”,“Grey
我正在构建一个API并使用swagger测试endpoint。我有一个产品: 在这个DTO中,我想使用在我的代码中使用的Price类。价格类如下所示: 但是由于私有设置器在类中使用,我无法使用swagger设置这些值(它在这些上具有属性)。我真的很喜欢这种拥有私有设置器并使用构造函数设置值的方法,顺便说一句,这是公共的。有没有办法我可以使用swagger为类设置值,并且仍然在属性上使用私有设置器?
下面是使用的示例。向导完成后,如何清除用户会话属性?在我的示例中,在返回到之后会话属性仍然存在。我尝试了和,但它不起作用。 我的错误<代码>状态。setComplete() 工作正常<代码>会话。removeAttribute(“用户”)在这里不需要做什么。
在kotlin中,如何将主构造函数中属性的setter设置为私有? 我希望属性<code>name</code>的setter是私有的,而getter是公共的,我该怎么做?
我正在尝试从我的主方法创建一个Spring bean。 我已将此bean配置为具有特定属性。这些值是在由@Configuration注释的SpringConfig类中指定的。 bean是使用Spring Application Context在我的main()方法中创建的。bean成功启动,但它没有我在SpringConfig类中指定的属性。我不明白为什么? 我可能已经确定了问题的原因:这个bea
题目说明了一切,我得到了一个类,其中构造函数的变量必须是私有的。 当然,它附带了变量的公共。 现在问题就在我尝试制作一个名为 Magazine 的子类之后。该类应继承名称和价格,但对于每个对象启动,价格都是恒定的。所以它们不会作为名称出现在构造函数上。 这也带有它自己的。 我试图将价格放在构造函数中,但构造函数需要一个传递的参数。使用还会通知父构造函数中没有一个具有这样的形状。 当我尝试使用父类方