Значение параметра [{}] не соответствует ожидаемому типу [java .lang.String (n / a)] - PullRequest
0 голосов
/ 29 января 2020

Я получаю сообщение об ошибке "Значение параметра [{}] не соответствует ожидаемому типу [java .lang.String (n / a)]; вложенное исключение: java .lang.IllegalArgumentException"

Сущность:

public class Job implements Serializable {

    @NotNull
    @Column(name = "args", nullable = false)
    private String args;



DTO:

public class JobDTO implements Serializable {

    @NotNull
    private JSONObject  args;

Репозиторий:

@SuppressWarnings("unused")
@Repository
public interface JobRepository extends JpaRepository<Job, Long> {

    Job getByActionAndStatusAndCertificateInstanceIdAndAgentIdAndArgs(JobActions jobActions ,JobStatus jobStatus, Long certificateInstanceID, Long agentId, JSONObject args) ;

}

Служба:

    /**
     * 
     * @param dayBeforeExpiration
     * @return
     */
    public List<Certificate> getExpiredCertificatesList(Long dayBeforeExpiration) {
        JSONObject args = new JSONObject(); 
        List<Certificate> certificates = extendedCertificateRepository.findExpiredCertificates(dayBeforeExpiration);
        for (Certificate certificate : certificates) {
            List<CertificateInstance> certificateInstances = extendedCertificateInstanceRepository
                    .findCertificateInstancesByCertId(certificate);
            for (CertificateInstance certificateInstance : certificateInstances) {
                extendedCertificateRequestService.createJob(certificate.getAgent().getId(), certificateInstance.getId(),
                        JobActions.RENEW, args );

            }
        }

        return certificates;
    } 


    public JobDTO createJob(Long agentId, Long certificateInstanceId, JobActions action , JSONObject args ) {

        JobDTO jobDTO = new JobDTO();
        jobDTO.setAgentId(agentId);
        jobDTO.setCertificateInstanceId(certificateInstanceId);
        jobDTO.setAction(action);
        jobDTO.setStatus(JobStatus.PENDING);
        jobDTO.setArgs(args);
        return jobService.save(jobDTO);

    }



     * @param jobDTO the entity to save
     * @return the persisted entity
     */
    public JobDTO save(JobDTO jobDTO) {
        log.debug("Request to save Job : {}", jobDTO);
        if(extendedJobService.ckeckIsRenewJobExist(jobDTO)){
            return jobMapper.toDto(jobRepository.getByActionAndStatusAndCertificateInstanceIdAndAgentIdAndArgs(jobDTO.getAction(), jobDTO.getStatus(), jobDTO.getCertificateInstanceId(),
                jobDTO.getAgentId() , jobDTO.getArgs())) ;
        }
     Job job = jobMapper.toEntity(jobDTO);
       JobDTO result = jobMapper.toDto(job);
        jobSearchRepository.save(job);
        return result;
    }

JobMapper

@Mapper(componentModel = "spring", uses = {AgentMapper.class, CertificateInstanceMapper.class, ExtJobMapper.class})
public interface JobMapper extends EntityMapper<JobDTO, Job> {

    @Mapping(source = "agent.id", target = "agentId")
    @Mapping(source = "certificateInstance.id", target = "certificateInstanceId")
    JobDTO toDto(Job job);

    @Mapping(source = "agentId", target = "agent")
    @Mapping(source = "certificateInstanceId", target = "certificateInstance")
    Job toEntity(JobDTO jobDTO);



    default Job fromId(Long id) {
        if (id == null) {
            return null;
        }
        Job job = new Job();
        job.setId(id);
        return job;
    }
}

ExtJobMapper: преобразовать json объект в строку и вставить его

public interface ExtJobMapper {


    @Mapping(source = "org.json.JSONObject" , target ="java.lang.String")
    static java.lang.String mapJSONToString(org.json.JSONObject value) throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(value) ; 

        return jsonString ;
    }

    @Mapping(source = "java.lang.String" , target ="org.json.JSONObject")
    static  org.json.JSONObject mapStringToJson(java.lang.String value) throws JsonProcessingException {

        JSONObject convertedObject = new Gson().fromJson(value, JSONObject.class);


        return convertedObject ;
    }

}

edit JobService Объект args неявно преобразуется в значение String путем вызова метод toString, но та же проблема

    public JobDTO save(JobDTO jobDTO) {
        log.debug("Request to save Job : {}", jobDTO);
        if(extendedJobService.ckeckIsRenewJobExist(jobDTO)){
            return jobMapper.toDto(jobRepository.getByActionAndStatusAndCertificateInstanceIdAndAgentIdAndArgs(jobDTO.getAction(), jobDTO.getStatus(), jobDTO.getCertificateInstanceId(),
                jobDTO.getAgentId() , jobDTO.getArgs())) ;
        }
        Job job = new Job(jobDTO.getAction(),jobDTO.getArgs().toString(),jobDTO.getStatus(), agentRepository.getOne(jobDTO.getAgentId()), certificateInstanceRepository.getOne(jobDTO.getCertificateInstanceId())) ;
        job = jobRepository.save(job);

        JobDTO result = new JobDTO(job.getAction(), new JSONObject(job.getArgs()),job.getStatus(), job.getAgent().getId(),
        job.getCertificateInstance().getId()) ;
        jobSearchRepository.save(job);
        return result;
    }

...