当前位置: 首页 > 知识库问答 >
问题:

尝试设置列表时的TypeMismatch.java.util.list

祝灼光
2023-03-14

设定的功能为:

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

对象是

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;
    }
}

这是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;
    }

}

共有1个答案

利俊迈
2023-03-14

我能够使用表单验证重新创建您的错误案例。您可能试图为list 类型的tags变量传递[5,3]表单数据,但使用括号传递会破坏该结构,则该值应为5,3...

所以我所做的是;

>

  • 使用输入创建虚拟控制器;

    @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;
        }
    }
    

    传递带有tags=[5,3]的表单,在bindingresult中得到以下错误;

    org.springframework.validation.BeanPropertyBindingResult:1错误字段“tags”上对象“prm bcclipinsert”中的字段错误:拒绝值[[5,3]];代码[typemismatch.prmbcclipinsert.tags,typemismatch.tags,typemismatch.java.util.list,typemismatch];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[prmbcclipinsert.tags,tags];参数[];default message[tags]];默认消息[无法将“java.lang.String”类型的属性值转换为属性“tags”所需的类型“java.util.List”;嵌套异常为java.lang.NumberFormatException:输入字符串:“[5,3]”]

    你得到的错误是一样的...因此,我认为您要么像我的示例中那样将prmbclipinsert作为表单输入,要么试图在代码的其他部分执行类似的绑定...

    传递带有标记=5,3的表单,没有错误...

    可以有自定义转换器来支持在绑定逻辑中传递带有括号的所述数组输入;

    @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());
        }
    }
    

    这样,5,3[5,3]都可以作为tags变量的值提供。

  •  类似资料:
    • 我有以下代码: 这工作正常,直到我这样做(试图设置列'idx'作为索引的数据帧) 这会引发一个错误 这是什么意思?

    • 问题内容: 我尝试通过bash脚本执行此命令,但出现以下错误: 错误stacktrace: {“错误”:“ IndexPrimaryShardNotAllocatedException [[my_index]主要未分配后api]”,“状态”:409} {“错误”:“ ElasticSearchIllegalArgumentException [无法更新非动态设置[[index.analysis.f

    • 我无法使用Java在AWS Lambda上使用以下逻辑: 1) 当在S3 bucket中创建新对象时,触发lambda函数(用java编写) 2) 在这个lambda函数中,列出所有DynamoDB表。 3) 如果没有,请创建一个表。 4) 将S3对象的详细信息作为项写入DynamoDB。 我只让第1项起作用。当它到达第2项时,我在下面遇到了一个与权限相关的错误。 有什么帮助或建议吗? 我使用的权

    • 我试图找出使用VAVR的Try的惯用方法。我正在查看的用例必须执行以下步骤: -获取鞋的列表(调用可以引发选中的异常) -清理每个鞋(调用可以引发选中的异常) -还原每个鞋(调用可以引发选中的异常) -返回清理/还原的鞋的列表 这是我的示例玩具代码,其中processRequest方法购买n双鞋,清洗 我的问题是:如何简化这种逻辑?是否存在可以消除的方法调用?是否可以提高可读性?

    • 我需要得到尼泊尔的现场时间,但无法通过它。如何获得尼泊尔的现场时间,这是GMT+5:45?我怎么才能熬过去?如何改变现场,英语根据我们的当地时间?这里的日期是英文标准的。

    • 我将 0 到 1000 之间的所有数字相加,这些数字是倍数或 3 和 5。我只是在将它们加起来时遇到麻烦。我不断收到错误消息:线程“main”java.lang.IndexOutOfBounds异常异常:索引:468,大小:468 我的代码 有人知道原因吗?我不明白为什么它不起作用。它打印出数组列表,所以我肯定应该将元素添加在一起……