gpt4 book ai didi

java - Spring Json @RequestBody post 报错400

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:25:35 24 4
gpt4 key购买 nike

这里是涉及的类。

public class UserAuthDto {

private String username;

private String password;

private List<String> roles;

private String tenantCode;

public UserAuthDto(String username,
String password,
List<String> roles,
String tenantCode){
this.username=username;
this.password=password;
this.roles=roles;
this.tenantCode=tenantCode;
}

public void setUsername(String username) {
this.username = username;
}

public void setPassword(String password) {
this.password = password;
}

public void setRoles(List<String> roles) {
this.roles = roles;
}

public void setTenantCode(String tenantCode) {
this.tenantCode = tenantCode;
}

public String getUsername() {
return username;
}

public String getPassword() {
return password;
}

public List<String> getRoles() {
return roles;
}

public String getTenantCode() {
return tenantCode;
}
}

另一个DTO

public class UserAuthRequest {

private UserAuthDto userAuthDto;

public UserAuthRequest(UserAuthDto authDto){
if(authDto == null){
throw new IllegalArgumentException("User Authentication DTO Should Not be null");
}
this.userAuthDto = authDto;
}
public String getUsername(){
return userAuthDto.getUsername();
}

public String getPassword(){
return userAuthDto.getPassword();
}

public List<String> getRoles(){
return userAuthDto.getRoles();
}

public String getTenantCode(){
return userAuthDto.getTenantCode();
}

public void setUsername(String username) {
this.userAuthDto.setUsername(username);
}

public void setPassword(String password) {
this.userAuthDto.setPassword(password);
}

public void setRoles(List<String> roles) {
this.userAuthDto.setRoles(roles);
}

public void setTenantCode(String tenantCode) {
this.userAuthDto.setTenantCode(tenantCode);
}
}

这是处理请求的 Controller 。

@RequestMapping(value = "authenticate", method = RequestMethod.POST,consumes = "application/json",produces = "application/json")
public UserAuthResponse authenticate(@RequestBody UserAuthRequest authRequest){
//.
}

但是当我发送这些数据时

{"username": "test","password":"test","roles":null,"tenantCode":"test"}

我收到一个 400 错误请求。知道为什么吗?

最佳答案

Spring 使用 Jackson 将请求中的 JSON 映射到 Java 对象以作为参数传递给您的处理程序方法。

这是 the JSON types .以下是 Jackson 如何进行 JSON 映射:

  1. JSON 对象映射到 Java Map 或自定义类对象
    • JSON对象键值对的键映射到类实例字段
  2. JSON 数组映射到 Java 数组或Collection 类型(ListSet 等)
  3. JSON 数字映射到 Java 数值类型(intdoubleLong 等。基本类型和引用类型)
  4. JSON 字符串映射到 Java String 对象(或字段,如果 JSON 字符串是键)
  5. JSON null 映射到 Java null
  6. JSON false 和 true 映射到 Java falsetrue

您提供了以下 JSON

{"username": "test","password":"test","roles":null,"tenantCode":"test"}

这是一个JSON对象,有4个键值对,其中键分别是usernamepasswordroles租户代码。因此,您需要一个具有这些名称的字段(或属性)的 Java 类。你有这样一个类,UserAuthDto。这就是您应该用作参数类型的内容。


您可以通过在类路径上提供适当的 slf4j 和 logback 或 log4j 库来启用日志记录,并为 Spring 的记录器进行适当的配置。

关于java - Spring Json @RequestBody post 报错400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com