当前位置: 首页 > 知识库问答 >
问题:

为什么控制器代码不能在Spring Boot应用程序中执行[重复]

萧展鹏
2023-03-14

我试图在STS3中制作一个简单的Spring Boot应用程序,用户可以在其中注册并创建他们的帐户。我在Hibernate中使用PostgreSQL数据库和JPA。下面是代码。

实体类:

package tv.app.user;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class UserAccount {
    @Id
    @GeneratedValue
    private Long uid;

    private String username;
    private String email;
    private String password;

    public long getUid() {
        return uid;
    }

    public void setUid(long uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

控制器:

package tv.app.user;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class UserAccountController {

    @Autowired
    UserAccountService userAccountService;

    @RequestMapping(value="/register", method=RequestMethod.POST)
    public void registerAccount(@RequestBody UserAccount user) {
        System.out.println("------2------");
        System.out.println(user.getfName());
        userAccountService.register(user);
    }
}

存储库:

package tv.app.user;

import org.springframework.data.repository.CrudRepository;

public interface UserAccountRepository extends CrudRepository<UserAccount, Long> {

}

buisness服务类:

package tv.app.user;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserAccountService {

    @Autowired
    private UserAccountRepository userRepository;

    public void register(UserAccount user) {
        userRepository.save(user);
    }
}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action="/register" method="post">
        <input type="text" name="username" placeholder="Username" required /><br>
        <input type="text" name="email" placeholder="Email ID" required /><br>
        <input type="password" name="password" placeholder="Password" required /><br>
        <input type="submit" value="Signup" />
    </form>
</body>
</html>

application.properties文件:

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

spring.jpa.hibernate.ddl-auto=create

spring.datasource.initialization-mode=always
spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/myApp
spring.datasource.username=postgres
spring.datasource.password=postgres

在单击submit之后,控件似乎永远不会进入控制器,因为---2--永远不会输出到控制台,即使表单中的操作与请求映射相同。

显示的错误是:

出现意外错误(Type=不支持的媒体类型,status=415)。不支持内容类型'application/x-www-form-urlencoded;charset=utf-8'

共有1个答案

颜功
2023-03-14

确保调用的是控制器中声明的确切endpoint(localhost:port/register)。如果你不正确,一个HTTP404错误可能会输出...检查一下。

如果您没有得到任何HTTP错误,我会将注释更改为这种格式(并相应地将调用更改为/register/user)(正如Spring在这里所指导的那样):

@RestController
@RequestMapping("/register")
public class UserAccountController {

@Autowired
UserAccountService userAccountService;

@PostMapping("/user")
public void registerAccount(@RequestBody UserAccount user) {
    System.out.println("------2------");
    System.out.println(user.getfName());
    userAccountService.register(user);
}
}
 类似资料:
  • 我的SpringBoot应用程序中有一个控制器: 我想在mocks的帮助下,将其与服务分开进行测试。如何实施?

  • 在线程池执行器类中,有一个maxPoolsize来指定最大线程池大小。这意味着如果线程数少于该数,则应立即执行池中的线程。但我发现并非如此。它实际上不能超越corePoolsize。我很困惑。如果maxPoolsize什么都不做,它的目的是什么?这是我的测试程序: 我已指定corePoolSize=2;maxPoolSize=6;我已经创建了5个线程(可运行)。我认为所有5个线程(可运行)应该同时

  • 我有一个springboot应用程序,它根据LDAP验证身份验证。我通过邮递员测试了它,它工作得很好。我扩展了WebSecurityConfigurerAdapter以根据LDAP验证登录凭据。这是工作很好,没有任何问题。我有一个angular前端,我调用/login,并将用户名和密码发送到它。它没有工作,我得到一个CORs错误。我将下面的代码添加到application.java中,我再也看不到

  • fReceiveBuffer是否存在一个视频帧? 哦,这里是我的FFMPEG初始化代码,需要打开相关视频解码器:http://paste.ubuntu.com/12529760//

  • 问题内容: 我想知道以下代码的行为背后的机制是什么: 我的理解是不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在命令后执行代码(我查看了快速源,但它似乎不是异步函数)。 还有其他我可能会想念的东西吗? 问题答案: 当然可以结束HTTP响应,但是它对您的代码没有做任何特殊的事情。 即使您已结束回复,也可以继续做其他事情。 但是,您 无法 做的是利用进行任何有用的操作。由于响应

  • 在JupyterLab中,我希望将代码从编辑器发送到Python控制台执行,最好使用键盘快捷键。文档似乎没有提供实现这一点的方法,但它是IDE的一个基本方面,我认为这是可能的。