问题描述
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 usuario\n" + e.getStackTrace()).build();
}
}
我正在使用 Postman,我的输入内容是:
</usuario idusuario="1">
<edad>43</edad>
<nombre>George</nombre>
</usuario>
错误是:Ljava.lang.StackTraceElement;@1aeb297
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));