我知道這個話題在 StackOverflow 上反復出現,但我看到的所有問題都是關于拼寫錯誤的名稱或不適用于我的案例。我求助于親自詢問,因為畢竟,我似乎無法修復它。
我正在關注 JavaBrain 頻道的教程,他使用 Spring Boot 從頭開始??創建一個簡單的 MVC 專案,當我遇到標題中描述的錯誤時,它就在這個視頻中:當我向服務器發送 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 之外。
感謝您的關注。
最好的祝福。
uj5u.com熱心網友回復:
您可以嘗試向控制器添加 @RequestBody 注釋。所以這:
@PostMapping("/jugadores/nuevo")
public void postJugador(Jugador jugador){
servicio.postJugador(jugador);
}
轉向這個:
@PostMapping("/jugadores/nuevo")
public void postJugador(@RequestBody Jugador jugador){
servicio.postJugador(jugador);
}
該注釋基本上告訴spring將您的輸入JSON反序列化為給定物件(Jugador)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/480284.html
