繁体   English   中英

RestController 中的错误请求 spring 引导 2.7

[英]Bad request in RestController spring boot 2.7

我检查了几种不同的方法来检查错误在哪里,但我仍然不知道答案。

那是我的 RestController

@RestController
public class CustomerController {
    @PostMapping(value = "/customer")
    public ResponseEntity<CustomerResponse> addCustomer(@RequestBody @Valid Customer custRequest) throws Exception {
        ModelMapper modelMapper = new ModelMapper();
        CustomerDto customerDto = modelMapper.map(custRequest, CustomerDto.class);
        CustomerDto addCust = customer.addCustomer(customerDto);
        CustomerResponse custResponse = modelMapper.map(addCust, CustomerResponse.class);
        return new ResponseEntity<CustomerResponse>(custResponse, HttpStatus.CREATED);
    }
}

那是我的 Model

@Entity
@Table(name = "customers")
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String idCustomer;
    private String email;
    @OneToMany(mappedBy = "customer",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    private List<Choice> choices;
    // Getter and setter and constructor
}

maven 依赖项

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

postman 的回应在此处输入图像描述

我该如何解决这个问题才能发布新客户。

@Valid 让框架检查方法调用的参数,如果验证失败,将抛出 HTTP 400 Bad Request 状态。 您有一个复杂的类型,该类型也需要验证。 这是一个链接: https://medium.com/javarevisited/are-you-using-valid-and-validated-annotations-wrong-b4a35ac1bca4

尝试删除 @Valid 以查看差异,上面的文章为您提供了一个示例实现。

此外,使用实体作为请求 object 是一种非常不鼓励的范例。 我们鼓励您首先根据您的要求制作 DTO object。 有些情况你必须继承,但这个问题的scope不是那个。

Customer的验证似乎失败了。 我会

  1. 查看日志以了解错误详细信息
  2. 考虑为请求 object 设置一个单独的 class。您真的不想混合数据库相关和请求相关的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM