【问题标题】:How receive a list of JavaScript objects in a List<Object> in Spring MVC?如何在 Spring MVC 的 List<Object> 中接收 JavaScript 对象列表?
【发布时间】:2017-04-20 20:47:03
【问题描述】:

我阅读了很多,但我不知道我的代码中的错误是什么。我希望你能帮助我。问候。

模型:RenglonFacturaDTO(与他的 getter/setter)

public class RenglonFacturaDTO implements Comparable<RenglonFacturaDTO>{

   private Integer idfact;
   private Long idrenglon;
   private Integer idremito;
   private Float cant;
   private String descripadic;
   private Double precio;
   private Double subtotal;
}

这是我通过 ajax 发送到控制器的对象列表

<script>
   $(document).ready(function(){
    
       var cliente = $('.id').data('id');
       var token = $("meta[name='_csrf']").attr("content");
       var header = $("meta[name='_csrf_header']").attr("content"); 
       var listado = [{}];
      

      $('#generar').click(function(){

         cliente = $('#idcliente').data('id');
    
         $('.renglon').each(function(){
        
             elem = $(this);    
        
             cant = elem.find('.cant').val();
             precio = elem.find('.precio').val();
             descripadic = elem.find('.descripadic').val();
             idremito = elem.find('.idremito').text();
             idrenglon = elem.data('idrenglon');
             idfact = $('#factura').data('idfact');
             subtotal = cant * precio;
        
             listado.push({"cant": parseFloat(cant),"precio": precio ,"descripadic":descripadic,"subtotal":subtotal ,"idremito":idremito ,"idrenglon":idrenglon , "idfact":idfact});
        
         });

       $.ajax({
          "type":"post",
          "url":"agregarRenglonesFactura",
          "dataType": 'json',
          "cache": false,
          "data": {"listado": listado},
          beforeSend: function(xhr) {
            // here it is
            xhr.setRequestHeader(header, token);
          }
        
         });
     });
 });
</script>

控制器

@RequestMapping(value="/agregarRenglonesFactura", method= RequestMethod.POST) 
public String redAgregarRenglonFactura(@ModelAttribute ArrayList<RenglonFacturaDTO> renglonesfacturadto) throws Exception{
    
        Iterator<RenglonFacturaDTO> it = renglonesfacturadto.iterator();
        
        while(it.hasNext()){
        
            RenglonFacturaDTO renglonfacturadto = it.next();
        
        System.out.println("***************AGREGAR RENGLON*******************IDRENGLONREMITO: " + renglonfacturadto.getIdrenglon() + " CANTIDAD: " + renglonfacturadto.getCant());
        }
        
        return ("TAMAÑO LISTA: " + renglonesfacturadto.size());
}   

这是错误:

 Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: 
Invalid property 'listado[10][cant]' of bean class [ar.edu.grupoesfera.cursospring.modelo.ListadoRenglonesFacturaDTO]:
Property referenced in indexed property path 'listado[10][cant]' is neither an array nor a List nor a Map; returned value was [ar.edu.grupoesfera.cursospring.modelo.RenglonFacturaDTO@67e12cdf]] con causa raíz

这是我通过 post 发送的数组

listado[0][cant]15
listado[0][descripadic]
listado[0][idfact]12
listado[0][idremito]9
listado[0][idrenglon]36
listado[0][precio]135
listado[0][subtotal]2025
listado[1][cant]15
listado[1][descripadic]
listado[1][idfact]12
listado[1][idremito]9l
istado[1][idrenglon]36
listado[1][precio]135
listado[1][subtotal]2025
listado[2][cant]15
listado[2][descripadic]
listado[2][idfact]12
listado[2][idremito]9
listado[2][idrenglon]36
listado[2][precio]135
listado[2][subtotal]2025

【问题讨论】:

  • 你应该创建一个像下面这样的合适的 JSON:- []

标签: java arrays ajax spring list


【解决方案1】:

对于 JQuery ajax 请求,尤其是在发送列表时,您希望使用 JSON.stringify()。

"data": JSON.stringify({ 'listado': listado }),

附带说明一下,由于实例化的方式,您还向列表传递了一个空值。你可以写

var listado = [];

【讨论】:

  • 感谢您的回答,我尝试了这个但没有任何反应,它可以正常工作但列表为空。
【解决方案2】:

您应该在将它发布到控制器之前创建一个正确的 JSON,如下所示

[ {“不能”:15, ... } ]

您的控制器 RequestMapping 应该如下所示:-

@RequestMapping(value="/agregarRenglonesFactura", method= RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE) 
public String  
redAgregarRenglonFactura(@RequestBody ArrayList<RenglonFacturaDTO> 
renglonesfacturadto) throws Exception{}

【讨论】:

  • 如果我通过 post 发送一个 json 数组,我得到:服务器拒绝此要求,因为所需实体的格式不受所需方法所需资源的支持。如果也是,我将“headers”:{'Content-Type':'application / json','Accept':'application / json'}添加到jquery ajax,我得到以下信息:客户发送的要求是语法不正确。
  • 将您的 ajax 调用更改为“数据”:listado
  • 它是一样的,我得到 Http 415,但我将 @ModelAttribute 更改为 @RequestParam("listado) List 并且我得到以下内容: {"listado":[{"idfact" :12 “idrenglon”:22 “idremito”:9 “cant”:1 “描述性”:“”“precio”:135 “小计”:135} {“idfact”:12 “idremito”:23 “idremito”:9 "cant":2 "descripadic":"""precio":65 "subtotal":130} {"idfact":12 "idrenglon":24 "idremito":9 "cant":3 "descripadic":""" precio":450 "subtotal":1350} ]} 但我不知道如何绑定 RenglonFacturaDTO 类型的集合。
  • 415 是不受支持的媒体类型,请参阅此 SO 帖子 stackoverflow.com/questions/32664316/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2013-12-28
  • 2014-05-25
相关资源
最近更新 更多