Firefox中的Rest客户端工具未命中JavaSpring4(带注释的)Rest控制器
嗨 我遇到了一个让我非常困惑的问题,因为映射应该可以工作,而且在调试模式下启动Spring引导时它看起来确实映射了。我不知道还能在哪里找到解决这个问题的明显方法 以下是application.properties: 下面是SpringBootInitializer类,它向>Servlet注册添加了进一步的“/api”:Firefox中的Rest客户端工具未命中JavaSpring4(带注释的)Rest控制器,spring,rest,spring-boot,Spring,Rest,Spring Boot,嗨 我遇到了一个让我非常困惑的问题,因为映射应该可以工作,而且在调试模式下启动Spring引导时它看起来确实映射了。我不知道还能在哪里找到解决这个问题的明显方法 以下是application.properties: 下面是SpringBootInitializer类,它向>Servlet注册添加了进一步的“/api”: 公共类应用程序扩展了SpringBootServletilizer{ @豆子 公共DispatcherServlet DispatcherServlet(){ 返回新的Dispa
公共类应用程序扩展了SpringBootServletilizer{
@豆子
公共DispatcherServlet DispatcherServlet(){
返回新的DispatcherServlet();
}
@豆子
public ServletRegistrationBean Dispatchers ServletRegistration(){
最终ServletRegistrationBean注册=新的ServletRegistrationBean(dispatcherServlet(),“/api/*”);
final Map params=new HashMap();
put(“contextClass”,“org.springframework.web.context.support.AnnotationConfigWebApplicationContext”);
put(“contextConfigLocation”,“org.spring.sec2.spring”);
参数put(“dispatchOptionsRequest”、“true”);
registration.setInitParameters(params);
注册。设置加载启动(1);
申报登记;
}
//
@凌驾
受保护的SpringApplicationBuilder配置(最终SpringApplicationBuilder应用程序){
返回application.initializer(新的MyApplicationContextInitializer()).sources(App.class);
}
公共静态void main(最终字符串…参数){
新的SpringApplicationBuilder(App.class).initializer(新的MyApplicationContextInitializer()).run(args);
}
}
这是一个控制器,它向映射中添加了更多的“用户”。我设置了一个调试点的方法>是findAll,不需要进一步的映射来>访问它(即/users/的根):
@控制器
@请求映射(值=用户)
公共类UserController扩展了AbstractController{
@自动连线
专用IUSERSERSERVICE用户服务;
公共用户控制器(){
super(User.class);
}
//原料药
//发现
@RequestMapping(method=RequestMethod.GET)
@应答器
public void getItsWorking(){
System.out.println(“它正在工作!!!”;
}
}
以下是用户实体:
@实体
公共类用户实现了安全性{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“user\u id”)
专用长用户标识;
@列(name=“username”,unique=true,nullable=false)
私有字符串名称;
@列(unique=true,nullable=false)
私人字符串电子邮件;
@列(nullable=false)
私有字符串密码;
@列(nullable=false)
私有布尔锁;
公共用户(){
超级();
}
公共用户(最终字符串名称集、最终字符串密码集、/*final
集合角色集合,*/最终布尔锁定集合){
超级();
name=nameToSet;
password=passwordToSet;
锁定=锁定的状态;
}
//原料药
公共长getId(){
返回用户id;
}
public void setId(最终长idToSet){
用户id=idToSet;
}
公共字符串getName(){
返回名称;
}
public void setName(最终字符串名称集合){
name=nameToSet;
}
公共字符串getEmail(){
回复邮件;
}
public void setEmail(最终字符串emailToSet){
email=emailToSet;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(最终字符串passwordToSet){
password=passwordToSet;
}
公共布尔getLocked(){
返回锁定;
}
公共无效设置锁定(最终布尔锁定设置){
锁定=锁定的状态;
}
}
以下是Spring启动调试时的输出:
将“{[/users],methods=[GET]}”映射到public
java.util.List
org.um.web.controller.UserController.findAll(javax.servlet.http.HttpServletRequest)
因此,它看起来映射正确,但当我在Firefox中使用Rest>客户端工具加载项点击它时,在>以下url上执行“获取”时,我得到了以下信息:在标题中使用内容类型:application/json
发生了什么事?非常困惑。
您应该在类上放置一个
@RequestMapping(“/api”)
,在方法上放置一个@RequestMapping(“/users”)
(最好将某些内容返回给客户端)
这样,您的端点将被公开为
/api/users
,您将能够轻松地在/api/*
下向此类添加更多端点。感谢您的回复,Simon,但仍然是404。我还应该检查什么?原来我有一个来自先前目标构建的SecurityFilterChain类,它阻止了me访问控制器。清除并重建后,它将毫无问题地命中rest控制器方法。请尝试将@RequestMapping(value=users)
更改为@RequestMapping(value=“/api/users”)
。
server.port=8082
server.contextPath = /
public class App extends SpringBootServletInitializer {
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
final ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet(), "/api/*");
final Map<String, String> params = new HashMap<String, String>();
params.put("contextClass", "org.springframework.web.context.support.AnnotationConfigWebApplicationContext");
params.put("contextConfigLocation", "org.spring.sec2.spring");
params.put("dispatchOptionsRequest", "true");
registration.setInitParameters(params);
registration.setLoadOnStartup(1);
return registration;
}
//
@Override
protected SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
return application.initializers(new MyApplicationContextInitializer()).sources(App.class);
}
public static void main(final String... args) {
new SpringApplicationBuilder(App.class).initializers(new MyApplicationContextInitializer()).run(args);
}
}
@Controller
@RequestMapping(value = users)
public class UserController extends AbstractController<User> {
@Autowired
private IUserService userService;
public UserController() {
super(User.class);
}
// API
// find
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public void getItsWorking() {
System.out.println("It's Working!!!");
}
}
@Entity
public class User implements IEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="user_id")
private Long user_id;
@Column(name = "username", unique = true, nullable = false)
private String name;
@Column(unique = true, nullable = false)
private String email;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private Boolean locked;
public User() {
super();
}
public User(final String nameToSet, final String passwordToSet, /*final
Set<Role> rolesToSet,*/ final Boolean lockedToSet) {
super();
name = nameToSet;
password = passwordToSet;
locked = lockedToSet;
}
// API
public Long getId() {
return user_id;
}
public void setId(final Long idToSet) {
user_id = idToSet;
}
public String getName() {
return name;
}
public void setName(final String nameToSet) {
name = nameToSet;
}
public String getEmail() {
return email;
}
public void setEmail(final String emailToSet) {
email = emailToSet;
}
public String getPassword() {
return password;
}
public void setPassword(final String passwordToSet) {
password = passwordToSet;
}
public Boolean getLocked() {
return locked;
}
public void setLocked(final Boolean lockedToSet) {
locked = lockedToSet;
}
}
Mapped "{[/users],methods=[GET]}" onto public
java.util.List<org.um.persistence.model.User>
org.um.web.controller.UserController.findAll(javax.servlet.http.HttpServletRequest)