【问题标题】:Java Spring: send list from Ajax to ControllerJava Spring:将列表从 Ajax 发送到控制器
【发布时间】:2021-06-19 08:06:04
【问题描述】:

我正在尝试发送一个数组 this Json data 在 JSP 中使用此 Ajax 的数据:

$.ajax({
        url:  'agregarSeleccion',
        type: 'POST',
        dataType:'json',
        data: JSON.stringify(lista),
        success:function(dataP){
            //Successs
        error: function (jqXhr) { 
            swal("Error","","error");
        }
   });  

Java 中的这个控制器(Spring 框架):

private List<Seleccion> seleccionados = new ArrayList<Seleccion>();

@RequestMapping("/agregarSeleccion")
@ResponseBody
public List<Seleccion> agregar(Seleccion obj) {
    seleccionados.add(obj);
    return seleccionados;
}

"Seleccion" 对象是一个实体,具有我从 Ajax 发送的 JSON 的一些属性,"seleccionados" 是一个保存收到数组,但是当我发送它时,obj 参数总是返回一个空对象,并且 Ajax 发送错误函数,我认为问题是我正在向 Object 发送一个数组,但我可以不知道怎么解决

选择对象模型:

public class Seleccion {
    private int idProducto;
    private String nombre;
    private double precio;
    private int cantidad;
    private double totalParcial;
   //Getters and setters
}

【问题讨论】:

    标签: java ajax spring controller


    【解决方案1】:

    尝试使用 ResponseEntity 并像下面的 sn-p 那样更新您的控制器;

    测试数据

    [
    {
        idProducto : 1,
        nombre : 'Test1',
        precio : 1.5,
        cantidad : 1,
        totalParcial : 2.5
    }
    ]
    

    你的 Ajax(我将数据类型改回 json);

    $.ajax({
            url:  'agregarSeleccion',
            type: 'POST',
            contentType: "application/json",
            data: JSON.stringify(lista),
            success:function(dataP){
                console.log(dataP);
            },
            error: function (jqXhr) { 
                swal("Error","","error");
            }
       });
    

    你的控制器(注意一个变量也声明在方法之外,添加了 allAll 方法来添加列表,最后更改了 返回类型 )

    List<Seleccion> seleccionados;
    @RequestMapping("/agregarSeleccion")
    public ResponseEntity<?> agregar(@Valid @RequestBody List<Seleccion> obj) {
        
        seleccionados = new ArrayList<Seleccion>();
        System.out.println("result"+ obj.toString());
        seleccionados.addAll(obj);  
        return new ResponseEntity<>(seleccionados, HttpStatus.OK);
        
    }
    

    【讨论】:

    • 没有结果,如果我在控制器和“seleccionados”变量中将 List 更改为 ResponseEntity,代码显示和有关 Instance 的错误
    • 我编辑了我的答案 -> agregar(@Valid @RequestBody List obj) 在方法签名中添加了一个带有 RequestBody 注释的列表。
    • 我得到一个“已解决 [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]”还有“seleccionados .add(obj)”仍然出现错误“List 类型中的方法 add(Seleccion) 不适用于参数 (List)”
    • 将 ajax 中的数据类型更改为 -> dataType : "html" 这将解决媒体类型错误。
    • 完成了,这4个属性是从Json文件中提取的数据,而double的“totalParcial”取值来自cantidad*precio
    猜你喜欢
    • 2014-04-16
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多