首页 > 解决方案 > 将列表项从 html 表保存到 Mysql

问题描述

我正在尝试从 mysql 中的 html 表中保存项目列表,但它给了我一个错误:无法将“java.lang.String”类型的值转换为所需的“java.lang.Long[]”类型;嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“{ID}”。

我的代码是:

实体类是

   package com.gadpo.cga.app.models.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Table(name = "paquetes")
public class Paquete implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @NotEmpty
    private String detalle;
    
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Temporal(TemporalType.DATE)
    @NotNull
    @Column(name="fecha")
    private Date fecha;
    
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name="paquete_id")
    private List<Actividad> actividades;
    
    @NotNull
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name="paquete_id")
    private List<ItemPaquete> items;
    
    //@OneToMany(mappedBy = "paquete", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    //private List<Usuario> usuarios;
    
    
    public List<ItemPaquete> getItems() {
        return items;
    }



    public void setItems(List<ItemPaquete> items) {
        this.items = items;
    }


    @ManyToOne(fetch = FetchType.LAZY)
    private Usuario usuario;
    
    
    
    @ManyToOne(fetch = FetchType.LAZY)
    private Planificacion planificacion;
    
    public Long getId() {
        return id;
    }



    public void setId(Long id) {
        this.id = id;
    }



    public String getDetalle() {
        return detalle;
    }



    public void setDetalle(String detalle) {
        this.detalle = detalle;
    }



    public List<Actividad> getActividades() {
        return actividades;
    }



    public void setActividades(List<Actividad> actividades) {
        this.actividades = actividades;
    }
    


    public Planificacion getPlanificacion() {
        return planificacion;
    }



    public void setPlanificacion(Planificacion planificacion) {
        this.planificacion = planificacion;
    }
    
    


    public Usuario getUsuario() {
        return usuario;
    }



    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }




    public Date getFecha() {
        return fecha;
    }



    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public void addItemPaquete(ItemPaquete item) {
        items.add(item);
    }


    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    
}

控制器是:

package com.gadpo.cga.app.controller;

import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.gadpo.cga.app.models.entity.ItemPaquete;
import com.gadpo.cga.app.models.entity.Paquete;
import com.gadpo.cga.app.models.entity.Planificacion;
import com.gadpo.cga.app.models.entity.Usuario;
import com.gadpo.cga.app.models.service.IUsuarioService;

@Controller
@RequestMapping("/paquete")
@SessionAttributes("paquete")
public class PaqueteController {

    @Autowired
    private IUsuarioService usuarioService;
    
    private final Logger log = LoggerFactory.getLogger(getClass());
    
    @GetMapping("/form/{planificacionId}")
    public String crear(@PathVariable(value="planificacionId") Long planificacionId, Map<String, Object> model, RedirectAttributes flash) {
        
        Planificacion planificacion=usuarioService.findPlanificacionById(planificacionId);
        
        if(planificacion==null) {
            flash.addFlashAttribute("error","La planificación no existe en la bd");
            return "redirect:/listar";
        }
        Paquete paquete = new Paquete();
        paquete.setPlanificacion(planificacion);
        model.put("paquete", paquete);
        model.put("titulo", "Registro de paquete");
        
        return "paquete/form";
    }
    
    @GetMapping(value="/cargar-usuarios/{term}", produces= {"application/json"})
    public @ResponseBody List<Usuario>cargarUsuarios(@PathVariable String term){
        return usuarioService.findByApellido(term);
    }
    
    @PostMapping("/form")
    public String guardar(@Valid Paquete paquete,BindingResult result,Model model, 
            @RequestParam(name="item_id[]",required = false) Long [] itemId,RedirectAttributes flash, SessionStatus status) {
        
        if (result.hasErrors()) {
            model.addAttribute("titulo", "Registrar nuevo paquete");
            return "paquete/form";
        }
        
        for(int i=0; i<itemId.length;i++) {
            //System.out.println("ID del usuario: "+itemId[i]);
            Usuario usuario = usuarioService.findUsuarioById(itemId[i]);
            ItemPaquete linea = new ItemPaquete();
            linea.setUsuario(usuario);
            paquete.addItemPaquete(linea);
            log.info("ID: "+itemId[i].toString());
        }
        
    /*  if (result.hasErrors()) {
            model.addAttribute("titulo", "Formulario de paquete");
            return "paquete/form";
        }*/
        usuarioService.savePaquete(paquete);
        status.setComplete();
        flash.addFlashAttribute("success","Paquete creado con éxito!");
        
        return "redirect:listar";
    }
    
    
    
}

我的表格是

form_paquete

标签: javaspring

解决方案


要求

在browser中检查请求时,第一个元素是字符串“{ID}”,不明白


推荐阅读