1

私は、レストコントローラーが一番上にあるスプリングブートアプリケーションを持っています。ユーザーはコントローラーにアクセスし、/test次のように json を渡します。

{"ssn":"123456789"}

少なくとも次のように空の ssn が渡されていないことを確認して、入力を検証したいと思います。

{"ssn":""}

だからここに私のコントローラーがあります:

@RequestMapping(
            value = "/test",
            method = RequestMethod.POST,
            consumes = "application/json",
            produces = "application/json")
@ResponseBody
public JsonNode getStuff(@RequestHeader HttpHeaders header,
                                 @RequestBody String payload,
                                 BindingResult bindingResult) {
    validator.validate(payload, bindingResult);
    if(bindingResult.hasErrors()) {
        throw new InvalidRequestException("The request is incorrect", bindingResult);
    }
    /* doing other stuff */
}

そして、ここに私のバリデーターがあります:

@Component
public class RequestValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return false;
    }

    @Override
    public void validate(Object target, Errors errors) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode ssn = null;
        try {
            ssn = mapper.readTree((String) target);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(ssn.path("ssn").isMissingNode() || ssn.path("ssn").asText().isEmpty()) {
            errors.rejectValue("ssn", "Missing ssn", new Object[]{"'ssn'"}, "Must provide a valid ssn.");
        }
    }
}

郵便配達員でこれをテストしようとしましたが、このエラーが発生し続けます:

HTTP Status 500 - Invalid property 'ssn' of bean class [java.lang.String]: Bean property 'ssn' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

ここでの問題は正確には何ですか?ゲッターとセッターに関連して何を話しているのかわかりません。

編集 1:要求されたペイロードの値

{"ssn":""}
4

1 に答える 1