gpt4 book ai didi

Java Spring rest java.lang.ClassCastException : java. util.LinkedHashMap 无法转换为 Cuestionario

转载 作者:行者123 更新时间:2023-11-30 10:19:48 31 4
gpt4 key购买 nike

我使用 Spring Rest 开发了以下代码。

我的代理

public Respuesta reject(Integer id,Integer uid, Integer asociation, String reason,Integer type, Cuestionario cuestionario){
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(METHOD_REJECT_FULLPATH);
Map<String,Serializable> map = new HashMap<String,Serializable>(2);
map.put("cuestionario",cuestionario);
map.put("motivo",motivo);
ResponseEntity<RespuestaServidor> respuesta = restTemplate.exchange(builder.buildAndExpand(id,uid,type, idTipo,asociation).encode().toUri(),
HttpMethod.POST,
new HttpEntity<Map<String,Serializable>>(map),
new ParameterizedTypeReference<Respuesta>(){});
return respuesta.getBody();
}

URI 调用此方法。

@RequestMapping(value = Proxy.METHOD_REJECT,method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<Respuesta>reject(@PathVariable Integer id,@PathVariable Integer uid,@PathVariable Integer asociation, @PathVariable Integer type,@RequestBody(required=false)Map<String,Object>map){
final String motivo = (String)map.get("motivo");
final Cuestionario cuestionario = (Cuestionario)map.get("cuestionario");

问题出在这一行

    final Cuestionario cuestionario = (Cuestionario)map.get("cuestionario");        

下面是Cuestionario POJO

public class Cuestionario implements Serializable {

private static final long serialVersionUID = -2669540728368524646L;
private String respuesta1;
private String respuesta2;
private String respuesta3;
private String respuesta4;
private boolean fullfilled;

我得到以下异常

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.Cuestionario

我在其他与此问题类似的帖子中读到,其中指出这是一种 Java 怪癖,而其他意见则指出映射器可用于检索/转换 Cuestionario 对象。但由于我在 REST 方面的专业知识有限,我不知道有任何映射器。

我有一个非常相似的代码,但是有一个

Map<List<Integer>,List<Integer>>

并且工作完美。但它对 Cuestionario 来说是失败的。我也尝试过使用 Spring LinkedMultiValueMap,但这也不起作用。

MultiValueMap<String,Serializable> map = new LinkedMultiValueMap<String, Serializable>(2);
map.add("motivo",motivo);
map.add("cuestionario",cuestionario);

我需要在某处解析请求主体并根据数据构建一个 Cuestionario 实例,但我该怎么做。

最佳答案

您正在尝试将一个Object 转换为一个Cuestionario,这是行不通的

@RequestMapping(value = Proxy.METHOD_REJECT,method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<Respuesta>reject(@PathVariable Integer id,@PathVariable Integer uid,@PathVariable Integer asociation, @PathVariable Integer type,@RequestBody(required=false)Map<String,Object>map){
final String motivo = (String)map.get("motivo");
// Here map is of type Map<String, Object>
final Cuestionario cuestionario = (Cuestionario)map.get("cuestionario");

您必须手动反序列化响应正文。

由于您使用的是 Spring,因此您的依赖项中可能已经有 Jackson。您可以扩展 JsonDeserializer

public class CuestionarioDeserializer extends JsonDeserializer<Cuestionario> {
@Override
public Cuestionario deserialize(JsonParser parser, DeserializationContext context) throws IOExcention {
//Your deserialization logic
}
}

然后注释你的 Cuestionario 如下:

@JsonDeserialize(using = YourCuestionarioDeserializer.class)
public class Cuestionario

或者做同样的事情,但反序列化为 DTO,然后使用 DTO 创建一个 Cuestionario

关于Java Spring rest java.lang.ClassCastException : java. util.LinkedHashMap 无法转换为 Cuestionario,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48444856/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com