RESTfull中的POST方法和sql或生成id的Statement有问题吗



GET、PUT和DELETE可以工作,但尝试执行POST方法不起作用。在我的数据库中,"usuario"有一个id、一个名字和年龄(edad(。

@POST
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response crearUsuario(Usuario usuario) {
try {
String sql = "INSERT INTO `RedLibros`.`usuario`(`nombre`,`edad`) " + "VALUES('"
+ usuario.getnombre() + "', '" + usuario.getedad() + "');";

PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
int affectedRows = ps.executeUpdate();

ResultSet generatedID = ps.getGeneratedKeys();
if (generatedID.next()) {
usuario.setidusuario(generatedID.getInt(1));
String location = uriInfo.getAbsolutePath() + "/" + usuario.getidusuario();
return Response.status(Response.Status.CREATED).entity(usuario).header("Location", location).header("Content-Location", location).build();
}
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("No se pudo crear el usuario").build();

} catch (SQLException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("No se pudo crear el usuarion" + e.getStackTrace()).build();
}
}

我使用Postman,我输入的正文是:

</usuario idusuario="1">
<edad>43</edad>
<nombre>George</nombre>
</usuario>

错误为:Ljava.lang.StackTraceElement@297年2月1日

And this is the script of my db, im not sure if its because the character set, im using UTF-8.
-- MySQL Script generated by MySQL Workbench
-- lun 19 abr 2021 14:13:50 CEST
-- Model: New Model    Version: 1.0
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema RedLibros
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `RedLibros` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `RedLibros` ;
-- -----------------------------------------------------
-- Table `RedLibros`.`usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `RedLibros`.`usuario` (
`idusuario` INT NOT NULL,
`nombre` VARCHAR(45) NULL,
`edad` VARCHAR(45) NULL,
PRIMARY KEY (`idusuario`))
ENGINE = InnoDB;

我认为您没有从POST调用传递idusuario。如果您希望这是自动递增的,那么您需要相应地定义表。您应该使用如下的auto_increment语法-

CREATE TABLE IF NOT EXISTS RedLibros.usuario ( idusuario INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(45) NULL, edad VARCHAR(45) NULL, PRIMARY KEY (idusuario));

最新更新