Java_Spring: не удалось преобразовать значение свойства типа 'java .lang.String' в требуемый тип 'java .util.Map' для свойства 'paramsMap' - PullRequest
0 голосов
/ 20 марта 2020

Создает API отдыха с использованием Java Spring и хотел бы получить входные данные в формате карты, но получить приведенную ниже ошибку. Кто-нибудь знает, что вызывает это исключение?

Были просмотрены ресурсы (не удалось решить проблему):

http://www.java2s.com/Tutorials/Java/Spring/0140__Spring_Map_Properties.htm

Spring MVC заполнить @RequestParam Map

https://www.baeldung.com/spring-date-parameters

@RequestMapping("/api")
public interface ApiController {
          @GetMapping("/submitJob")
    JobSubmitResultDTO submitJob(@RequestBody JobSubmitRequestDTO request);
}

@Data
public  class JobSubmitRequestDTO {

    Map<String,Object> paramsMap = new HashMap<String,Object>();

}

@Data
public class JobSubmitResultDTO {
    String jobID;
    String message;
}  

@RestController
public class ApiController implements ApiController {


    @Override
    public JobSubmitResultDTO submitJob(JobSubmitRequestDTO request) {

        //Create an instance of JobSubmitResultDTO
        JobSubmitResultDTO response = new JobSubmitResultDTO();
        return response; //return null values for now 

    }
}

URL:  http://XXXXXXXXX:XXXXX/api/submitJob?paramsMap=%7B%7D

***passing {} -> %7B%7D or {'Age':12} would return the same error*** 

Error:
    {
  "timestamp": "2020-03-19T21:38:15.443+0000",
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.validation.BindException",
  "errors": [
    {
      "codes": [
        "typeMismatch.jobSubmitRequestDTO.paramsMap",
        "typeMismatch.paramsMap",
        "typeMismatch.java.util.Map",
        "typeMismatch"
      ],
      "arguments": [
        {
          "codes": [
            "jobSubmitRequestDTO.paramsMap",
            "paramsMap"
          ],
          "arguments": null,
          "defaultMessage": "paramsMap",
          "code": "paramsMap"
        }
      ],
      "defaultMessage": "Failed to convert property value of type 'java.lang.String' to required type 'java.util.Map' for property 'paramsMap'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.Map' for property 'paramsMap': no matching editors or conversion strategy found",
      "objectName": "jobSubmitRequestDTO",
      "field": "paramsMap",
      "rejectedValue": "{}",
      "bindingFailure": true,
      "code": "typeMismatch"
    }
  ],
  "message": "Validation failed for object='jobSubmitRequestDTO'. Error count: 1",
  "path": "/api/submitJob"
}

1 Ответ

1 голос
/ 20 марта 2020

Вы принимаете данные в теле запроса, используя код.

JobSubmitResultDTO submitJob(@RequestBody JobSubmitRequestDTO request); 

Отправьте ваш объект JobSubmitRequestDTO в тело запроса. Вот пример тела запроса типа JSON, который работает (я тестировал с использованием почтальона):

{"paramsMap": {"Key1": "Value1", "Key2": "Value2"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...