我知道这个主题一直在StackOverflow上反复出现,但我看到的所有问题都是针对拼写错误的名字,或者不适用于我的情况。我求助于亲自询问,因为在这一切之后,我似乎无法修复它。
我正在遵循JavaBrain频道的教程,他在其中使用Spring Boot从头开始创建一个简单的MVC项目,当我遇到标题中描述的错误时,它就在这个video中:当我向服务器发送POST请求时,服务器接受并处理该请求,但插入null
值而不是接收到的值。
我使用的是IntelliJ IDEA Ultimate,并从IDE菜单本身(与start.spring.io相同)生成了项目,Spring Web 是唯一的依赖项。
我使用Postman发送请求,其中POST请求的HEADER是“Content-type application/json”。
使用此主体执行POST时:
{
"id": 9,
"nombre": "Galán",
"usuario": "srgalan"
}
执行GET时:
[
{
"id": 1,
"nombre": "Víctor",
"usuario": "viictor"
},
{
"id": 2,
"nombre": "Anabel",
"usuario": "anabeel"
},
{
"id": 0,
"nombre": null,
"usuario": null
},
]
- Víctor和Anabel已经是系统中的玩家(在服务类中手动声明)。
我共享我的模型、服务和控制器类,以及pom.xml文件(未修改)。
模型类别:
package com.meepletic.servidor.jugador;
public class Jugador {
private long id;
private String nombre; // "name"
private String usuario; // "username"
// Constructores // constructor
public Jugador() { // "Player"
}
public Jugador(long id, String nombre, String usuario) {
super();
this.id = id;
this.nombre = nombre;
this.usuario = usuario;
}
// Getters
public long getId() {
return id;
}
public String getNombre() {
return nombre;
}
public String getUsuario() {
return usuario;
}
// Setters
public void setId(long id) {
this.id = id;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
// Métodos
@Override
public String toString() {
return "Jugador #" + id + ": " + nombre + " (" + usuario + ")";
}
}
服务类别:
package com.meepletic.servidor.jugador;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
public class JugadorSer {
private List<Jugador> jugadores = new ArrayList<>(
Arrays.asList(
new Jugador(1L, "Víctor", "viictor"),
new Jugador(2L, "Anabel", "anabeel")
)
);
public List<Jugador> getJugadores() {
return jugadores;
}
public Jugador getJugador(long id) {
return jugadores.stream()
.filter(x -> x.getId() == id)
.findFirst()
.get();
}
public void postJugador(Jugador jugador) {
jugadores.add(jugador);
}
}
控制器类别:
package com.meepletic.servidor.jugador;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import java.util.List;
@RestController
public class JugadorCon {
@Autowired
private JugadorSer servicio; // "service"
// GET
@GetMapping("/jugadores")
public List<Jugador> getTodosJugadores(){
return servicio.getJugadores();
}
@GetMapping("/jugadores/{id}")
public Jugador getJugador(@PathVariable long id){
return servicio.getJugador(id);
}
// POST
@PostMapping("/jugadores/nuevo")
public void postJugador(Jugador jugador){
servicio.postJugador(jugador);
}
}
pom.xml
文件(未修改):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.meepletic</groupId>
<artifactId>servidor</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Servidor 6</name>
<description>Servidor 6</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我认为代码是好的,但最好确保;我的直觉告诉我问题来自IDE外部。
感谢您的关注。
顺祝商祺。
2条答案
按热度按时间svgewumm1#
您可以尝试在控制器中添加@RequestBody注解。
绎转向本:
注解基本上告诉Spring将输入JSON反序列化为给定对象(Jugador)
xurqigkl2#
我遇到了同样的问题,为了补充Fambo的答案,显然对象的字段(在本例中为Jugador)需要是私有的。