Не удалось преобразовать значение типа 'java.lang.String' в требуемый тип объекта модели - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь запустить службу с помощью почтальона, предоставив требуемый запрос в формате JSON:

 {
    "baseParam": {
        "userId": "u1234"
    },
    "resource": {
        "name": "resource"
    }
}

вместе с файлом, состоящим из нескольких частей, как показано на следующем экране почтальона

Экран почтальона

Но я получаю сообщение об ошибке:

'Не удалось преобразовать значение типа' java.lang.String 'в требуемый тип' SampleRequestObject ';вложенное исключение - java.lang.IllegalStateException: невозможно преобразовать значение типа [java.lang.String] в требуемый тип '

Controller

   @RequestMapping(method = RequestMethod.POST, value = "/sample/resource", 
   produces = "application/json")
   @ResponseBody
   public final ResponseObject sampleResource(@RequestParam("request") final 
   SampleRequestObject requestObject,@RequestParam("file") final 
   MultipartFile file,BindingResult result ) throws IOException {

   String success = “SUCCESS”;
   requestObject.setFile(file);
   String id=sampleService.sampleResourceService(resourceObject);   
   //sampleService Object has been autowired earlier in controller              
    return  success;                                                                                                       


    }  
    }

SampleRequestObject - Класс модели

    public class SampleRequestObject extends SampleMainObject {

    @NotNull
    @IsValid(baseParam = { "userId"})
    private BaseParam baseParam;

    @NotNull    
    private SampleResource resource;   // ANOTHER OBJECT OF SAMPLE RESOURCE 
                                          CLASS
    private MultipartFile file;

    public SampleResource getResource() {
    return resource;
    }

    public void setResource(SampleResource resource) {
    this.resource = resource;
    }

    @Override

    public Param getBaseParam() {

    return baseParam;
    }

    public final void setBaseParam(final BaseParam baseParam) {
    this.baseParam = baseParam;
    }

    public MultipartFile getFile() {
    return file;
    }

    public void setFile(MultipartFile file) {
    this.file = file;
    }   
    }

Функция в SampleServiceImpl.class (реализация SampleService)

    @Override
    @Transactional
    public final String sampleResourceService( SampleRequestObject 
    requestObject) {throws IOException
    String Id=null;

    try
    {

    MainResourceObject resourceObject = new MainResourceObject();
    resourceObject.setActualName(requestObject.getFile()
    .getOriginalFilename());
    resourceObject.setName(requestObject.getResource().getName()); );   
        .
        .
        .
        .  
        .
        .
        .
        .  

        .  
    }
    catch (Exception e) {
    log.error("Service Execution failed",e);
    }
    }

Я также попытался дать@ModelAttribute вместо @RequestParam.Затем можно было ввести контроллер, а также службу, но все значения requestObject (в контроллере) заполняются как нулевые значения.Следовательно, он генерирует исключение NullPointeException из реализации службы.

Пожалуйста, предоставьте решение.

1 Ответ

0 голосов
/ 20 сентября 2018

Можете ли вы попробовать это

public final ResponseObject sampleResource(SampleRequestObject request,
       @RequestParam("file") final MultipartFile file,
       BindingResult result ) throws IOException {
...

Я только что удалил @RequestParam и изменил переменную как request

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