我在Spring Boot控制器中访问实例JPA实体的数据时遇到困难。
这些是实体:
用户:
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(unique=true, length=50)
private String username;
@OneToMany(cascade = CascadeType.ALL)
private List<Authority> authorities = new ArrayList<>();
}
权威:
@Entity
@Data
public class Authority {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NotNull
private String authority;
}
用户存储库:
public interface UserRepository extends CrudRepository<User, Long> {
Optional<User> findByUsername(String username);
}
这是控制器方法:
@RestController
public class InfoController {
@RequestMapping(value="/userinfo", method= RequestMethod.GET)
public Optional<User> getUser() {
Optional<User> foundUser = repository.findByUsername("testuser");
return foundUser;
}
}
当我访问 /userinfo在我的浏览器我得到这个:
{
"id": 1,
"username": "testuser",
"password": "",
"enabled": true,
"authorities": [
{
"id": 1,
"authority": "ADMIN"
}
]
}
这很好,到目前为止看起来不错,但我想做的是迭代控制器中用户对象的authorities属性,但我似乎无法访问它(或任何其他属性)。我尝试过使用以下方法:
foundUser.getAuthorities();
foundUser.authorities;
foundUser.get('authorities');
......但是这些方法都不存在。我该怎么做?
您正在可选
对象上调用方法,而不是实际的User
对象。
您可以通过调用User actualUser=foundUser来检索用户对象。get()。
注意,的调用是可选的。get()
如果没有值,则抛出NoTouchElementException。
请注意,finUser
是可选的
为了访问其属性,您必须从“可选”中获取用户:
if (foundUser.isPresent()) {
User user = foundUser.get();
List<Authority> authorities = user.getAuthorities();
// Do what you need to do with the list of authorities
}
您还可以使用函数式编程风格的工作,方法是使用类
可选
上可用的方法,例如map
。例如,如果您想在找到可选
时仅获取用户的名称,您可以这样做:
// Transforms the Optional<User> to an Optional<String> containing the username
Optional<String> username = foundUser.map(User::getUsername);
或者是一个可选的权限列表:
Optional<List<Authority>> authorities = foundUser.map(User::getAuthorities);
可选
表示一个包含值或不包含值的对象。当找到用户时,您的存储库将返回一个可选
,其中包含一个User
对象,如果未找到用户,则返回一个空的可选
。
问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。
我有两个控制器和。 在中,我有一个名为的方法。 如何在中访问此方法?
之前也有讲到过,Python 没有真正意义上的私有属性。然后这就导致了对 Python 类的封装性比较差。我们有时候会希望 Python 能够定义私有属性,然后提供公共可访问的 get 方法和 set 方法。Python 其实可以通过魔术方法来实现封装。 方法 说明 __getattr__(self, name) 该方法定义了你试图访问一个不存在的属性时的行为。因此,重载该方法可以实现捕获错误拼写
在我的控制器中,我有一个用以下映射映射的方法:@PostMapping(“/”)。 此方法需要一个我试图捕获的请求主体,如下所述: 使用这两种方法对我来说都很好,我只是进退两难,如果直接在实体类中接受请求体是一个好主意和最佳实践的话。 我不想在controller类中公开我的实体类,因为我不确定这是否是一个好主意。 java 这两种方法都给出了相同的结果,更多的是关注要遵循的最佳实践。
容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。 容器访问外部网络 容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。 $sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1 如果为 0,
我尝试使用下面的代码访问元模型实体属性/变量: