消耗来自JSR-303验证的Spring API的响应吗?

时间:2019-01-31 15:26:00

标签: spring validation spring-boot spring-mvc bean-validation

我设置了一个API进行验证,并且那里没有问题。我的挑战是调用该API时,它将无法通过验证。当我的请求验证失败时,我不知道如何将响应直接映射到现有的Java类(当我知道这些类在我正在使用的框架中的某个位置时,我不想创建自己的类)。验证失败时,经过JSR-303验证的Spring API会映射到哪个类?

每个用于验证的“操作方法”网站都只谈论创建API,而不是使用它。

// Calling Code:
restTemplate.postForObject(serviceUrl, entity, ExpectedResponse.class)

// API Code:
@RequestMapping(path = "/api/endpoint", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<ExpectedResponse> apiMethod(@Validated({ ExtraValidation.class, DefaultValidation.class }) @RequestBody ExpectedData myExpectedData]) {

我想调用此API来消耗快乐路径(响应实体为ExpectedResponse.class),但也将验证失败映射到Java类?

如果我必须使用JSON映射器,那很好。主要问题是要知道验证响应在现有框架(Spring,Springboot,Hibernate等)中映射到哪个类进行处理。

示例响应:

    <Map>
      <timestamp>1548946732529</timestamp>
      <status>400</status>
      <error>Bad Request</error>
      <exception>org.springframework.web.bind.MethodArgumentNotValidException</exception>

      <errors>
        <codes>
            <codes>NotEmpty.expectedData.dataInitial</codes>
            <codes>NotEmpty.dataInitial</codes>
            <codes>NotEmpty.java.lang.String</codes>
            <codes>NotEmpty</codes>
        </codes>
        <arguments>
            <arguments>
                <codes>
                    <codes>expectedData.dataInitial</codes>
                    <codes>dataInitial</codes>
                </codes>
                <defaultMessage>dataInitial</defaultMessage>
                <code>dataInitial</code>
            </arguments>
        </arguments>
        <defaultMessage>may not be empty</defaultMessage>
        <objectName>expectedData</objectName>
        <field>dataInitial</field>
        <rejectedValue/>
        <bindingFailure>false</bindingFailure>
        <code>NotEmpty</code>
      </errors>
      <message>Validation failed for object='myExpectedData'. Error count: 2</message>
      <path>/api/endpoint</path>
    </Map>

0 个答案:

没有答案