typeMismatch.java.util.List al intentar establecer una lista

Ilhan:

Estoy tratando de establecer una List<Long>a un objeto Java.

La función de conjunto es:

ResponseEntity<String> response = bcInsertService.addNewClip(new PrmBcClipInsert()
    .setTags(Arrays.asList(new Long[]{5L, 3L}))
);

Y el objeto es

public class PrmBcClipInsert implements Serializable {

    @ApiModelProperty(required = true)
    private List<Long> tags;

    public List<Long> getTags() {
        return tags;
    }

    public PrmBcClipInsert setTags(List<Long> tags) {
        this.tags = tags;
        return this;
    }
}

Esta es BcInsertService:

public class BcInsertService extends RestTemplate {
    private static final Logger log = LoggerFactory.getLogger(BcInsertService.class);

    public ResponseEntity<String> addNewClip(PrmBcClipInsert prmBcClipInsert) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        MultiValueMap<String, Object> map= new LinkedMultiValueMap<String, Object>();
        HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<MultiValueMap<String, Object>>(prmBcClipInsert.getParameters(), headers);

        ParameterizedTypeReference<StandardResponse> typeRef = new ParameterizedTypeReference<StandardResponse>() {};
        ResponseEntity<String> response = this.postForEntity( "http://localhost:8080/bc/add-clip", request , String.class );
        log.info(response.toString());
        return response;
    }

}

Y se devuelve un error:

error de campo en el objeto 'prmBcClipInsert' en el campo 'etiquetas': valor rechazada [[5,3]]; códigos [typeMismatch.prmBcClipInsert.tags, typeMismatch.tags, typeMismatch.java.util.List, typeMismatch]; Argumentos [org.springframework.context.support.DefaultMessageSourceResolvable: códigos [prmBcClipInsert.tags, etiquetas]; argumentos []; mensaje predeterminado [tag]]; mensaje predeterminado [Error al valor de la propiedad de convertir del tipo 'java.lang.String' al tipo requerido 'java.util.List' para la propiedad 'etiquetas'; excepción anidada es java.lang.NumberFormatException: Para cadena de entrada: "[5,3]"]

¿Por qué el método no acepta una lista a pesar de que se dice que acepta una lista?

buræquete:

Yo era capaz de recrear su caso de error utilizando una validación de formularios. Usted está probablemente tratando de pasar una plantilla que es [5, 3]para la tagsvariable tipo List<Long>, pero que pasa con los soportes de romper esa estructura, el valor debe ser 5, 3...

Así que lo que he hecho es;

  1. Crear un controlador simulado utilizando su entrada;

    @Controller
    public class TestController {
    
        @PostMapping
        public ModelAndView test(@Validated @ModelAttribute final PrmBcClipInsert prmBcClipInsert, final BindingResult bindingResult) {
            final ModelAndView modelAndView = new ModelAndView();
            System.out.println(prmBcClipInsert.getTags());
            modelAndView.setViewName("test");
            return modelAndView;
        }
    }
    
  2. Pasar el formulario con tags=[5,3], y obtener el error siguiente en BindingResult;

    org.springframework.validation.BeanPropertyBindingResult: 1 errores error de campo en el objeto 'prmBcClipInsert' en el campo 'etiquetas': valor rechazado [[5, 3]]; códigos [typeMismatch.prmBcClipInsert.tags, typeMismatch.tags, typeMismatch.java.util.List, typeMismatch]; Argumentos [org.springframework.context.support.DefaultMessageSourceResolvable: códigos [prmBcClipInsert.tags, etiquetas]; argumentos []; mensaje predeterminado [tag]]; mensaje predeterminado [Error al valor de la propiedad de convertir del tipo 'java.lang.String' al tipo requerido 'java.util.List' para la propiedad 'etiquetas'; excepción anidada es java.lang.NumberFormatException: Para cadena de entrada: "[5,3]"]

    ¿Cuál es el error idéntica, que estaba recibiendo ... Así que supongo que tampoco recibe este PrmBcClipInsertcomo un formulario de entrada como en mi ejemplo, o que está tratando de hacer una unión en alguna otra parte de su código similar ...

  3. Pasar el formulario con tags=5,3, ningún error ...


No puede haber un convertidor de medida para el apoyo para el paso de dicho array entrada con soportes en la lógica de unión con algo parecido;

@Component
public class LongListConverter implements Converter<String, List<Long>> {

    @Override
    public List<Long> convert(String source) {
        return Arrays.stream(StringUtils.strip(source, "[]").split(","))
                .map(StringUtils::strip)
                .map(Long::new)
                .collect(Collectors.toList());
    }
}

Con esto, tanto 5, 3y [5, 3]se puede suministrar como valor de la tagsvariable.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=226123&siteId=1
Recomendado
Clasificación