如果我想通过这个 json 代码,制作控制器的方法是什么
What's the way to make controller if I want to pass this json code
我想问你如果我想像这样通过 JSON 我的休息控制器应该是什么样子(在 springboot 中)
user: {email: "c", password: "c", username: "c"}
顺便说一句 JSON 看起来效果不错:
{email: "c", password: "c", username: "c"}
所以我认为这取决于 JSON 中的 'user' 词,但问题是我的前端发送所有这样的请求,所以更好的方法是使它在后端可操作.
因为我的实际情况如下:
@PostMapping("/users")
public void register(@Valid @RequestBody ApplicationUserEntity newUser){
registerService.registerNewUser(newUser);
}
实际上没有用。
这是 ApplicationUserEntity class:
@Entity
@Data
@Table(name = "users")
public class ApplicationUserEntity implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonIgnore
private Long userId;
@JsonProperty("email")
private String email;
@JsonProperty("username")
private String username;
@JsonProperty("password")
private String password;
public ApplicationUserEntity() {
}
public ApplicationUserEntity(String email, String username, String password) {
this.email = email;
this.username = username;
this.password = password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority("ROLE_USER"));
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
您的请求正文可以是以下对象:
public class Request {
private ApplicationUserEntity user;
// getters, setters ...
}
它的字段就是你创建的Entity对象。在这种情况下,您的控制器方法将如下所示:
@PostMapping("/users")
public void register(@Valid @RequestBody Request newUser){
registerService.registerNewUser(newUser);
}
本例中的 JSON 请求为:
{
user: {
// fields of the ApplicationUserEntity
}
}
注意:始终建议您使用 DTO 对象 作为请求和响应对象。因此,在这种情况下,您宁愿拥有一个包含电子邮件、用户名、密码字段的 DTO 对象,并将此对象作为请求中的一个字段 class.
我想问你如果我想像这样通过 JSON 我的休息控制器应该是什么样子(在 springboot 中)
user: {email: "c", password: "c", username: "c"}
顺便说一句 JSON 看起来效果不错:
{email: "c", password: "c", username: "c"}
所以我认为这取决于 JSON 中的 'user' 词,但问题是我的前端发送所有这样的请求,所以更好的方法是使它在后端可操作.
因为我的实际情况如下:
@PostMapping("/users")
public void register(@Valid @RequestBody ApplicationUserEntity newUser){
registerService.registerNewUser(newUser);
}
实际上没有用。
这是 ApplicationUserEntity class:
@Entity
@Data
@Table(name = "users")
public class ApplicationUserEntity implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonIgnore
private Long userId;
@JsonProperty("email")
private String email;
@JsonProperty("username")
private String username;
@JsonProperty("password")
private String password;
public ApplicationUserEntity() {
}
public ApplicationUserEntity(String email, String username, String password) {
this.email = email;
this.username = username;
this.password = password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority("ROLE_USER"));
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
您的请求正文可以是以下对象:
public class Request {
private ApplicationUserEntity user;
// getters, setters ...
}
它的字段就是你创建的Entity对象。在这种情况下,您的控制器方法将如下所示:
@PostMapping("/users")
public void register(@Valid @RequestBody Request newUser){
registerService.registerNewUser(newUser);
}
本例中的 JSON 请求为:
{
user: {
// fields of the ApplicationUserEntity
}
}
注意:始终建议您使用 DTO 对象 作为请求和响应对象。因此,在这种情况下,您宁愿拥有一个包含电子邮件、用户名、密码字段的 DTO 对象,并将此对象作为请求中的一个字段 class.