在Spring中,我可以使用Principal
对象作为Web控制器方法的参数,并填充它。例如:
public String listTransactionsForAccount(Model model, Principal principal) {
String username = principal.getName();
// do something with the username
}
我的问题是:如何传入自定义对象(Account
)并填充它,类似于Spring填充Principal
的方式?
在我的应用程序模型中,我已经设置了每User
有0..n Account
s的设置。我可以根据Principal
获取用户,但我真正关注的是Account
。我发现我必须在很多地方这样做:
String username = principal.getName();
User user = userService.findByUsername(username);
Long accountId = user.getAccount().getId();
如果我能做到这一点,那将是理想的:
public String listTransactionsForAccount(Model model, Account account) {
// do stuff directly with the account
}
我将如何做到这一点?
答案 0 :(得分:1)
您可以使用@ModelAttribute参数和方法
以下是实现它的方法之一
public class AController {
@Autowired
private Object someBean;
@ModelAttribute
public void setAccount(Model model)
{
model.addAttrbute("account", new Account());
//you can use some injected object to retrieve account object
//ex someBean.getAccountFactory().getInstance();
}
@RequestMapping
public Strig yourMethod (@ModelAttribute("account") Account ac,Model model {
///your code
}
第一种方法将在第二种方法之前调用,它会将Account填充到模型中。这将被注入第二种方法
答案 1 :(得分:0)
@RC是对的......(作为答案发布,我会接受它)
我所做的如下:
@Controller
public class TxController {
public String listTransactionsForAccount(Model model, Account account) {
....
}
....
}
只要spring选择上面的类(通过组件扫描或bean声明),就会在这样的方法中填充 var locations = [];
值:
public partial class threat
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int threat_id { get; set; }
public int category_id { get; set; }
public double lat { get; set; }
public double lng { get; set; }
}