对于想了解使用Spring控制器处理错误404的读者,本文将是一篇不可错过的文章,我们将详细介绍spring控制器,并且为您提供关于java–如何使用JqueryAJAX调用Spring控制器方法、j
对于想了解使用Spring控制器处理错误404的读者,本文将是一篇不可错过的文章,我们将详细介绍spring 控制器,并且为您提供关于java – 如何使用Jquery AJAX调用Spring控制器方法、java-调用Spring控制器方法而不需要上网、Spring Boot控制器404、Spring Boot:控制器 - 404 未找到的有价值信息。
本文目录一览:- 使用Spring控制器处理错误404(spring 控制器)
- java – 如何使用Jquery AJAX调用Spring控制器方法
- java-调用Spring控制器方法而不需要上网
- Spring Boot控制器404
- Spring Boot:控制器 - 404 未找到
使用Spring控制器处理错误404(spring 控制器)
我@ExceptionHandler
用来处理Web应用程序引发的异常,在这种情况下,我的应用程序会返回JSON
响应,HTTPstatus
并向客户端发送错误响应。
但是,我试图弄清楚如何处理error 404
类似的JSON响应,例如由@ExceptionHandler
更新:
我的意思是,当访问不存在的URL时
答案1
小编典典查找最简单的方法是使用以下命令:
@ExceptionHandler(Throwable.class) public String handleAnyException(Throwable ex, HttpServletRequest request) { return ClassUtils.getShortName(ex.getClass()); }
如果该URL在DispatcherServlet的范围内,则该方法将捕获由错误或其他任何原因引起的任何404,但是如果键入的URL超出DispatcherServlet的URL映射,则您必须使用以下任一方法:
<error-page> <exception-type>404</exception-type> <location>/404error.html</location></error-page>
要么
为您的DispatcherServlet映射URL提供“ /”映射,以便处理特定服务器实例的所有映射。
java – 如何使用Jquery AJAX调用Spring控制器方法
我有以下Spring Controller
@Controller
@RequestMapping("/accreq")
使用以下映射
@RequestMapping(value = "/defRoles", method=RequestMethod.GET)
public @ResponseBody String loadDefaultRoles(
@RequestParam(value="idGroup", required=false) String groupID
throws servletexception{
我正在尝试使用以下jquery ajax调用此方法
$.ajax({
type: 'GET',
url: '/accreq/defRoles',
data: {idGroup: $('#infoGroup').val() },
success: function() {
alert("success");
}
});
请帮我弄清楚为什么即使在单击按钮时调用ajax方法也没有调用Spring方法.我已经使用firebug逐步完成了脚本,它肯定会触及ajax函数.
解决方法:
首先,尝试查看在浏览器中手动点击URL时会发生什么
如果成功,请打开firebug中的请求跟踪,看看firefox是否实际点击了URL(以及响应的内容)
java-调用Spring控制器方法而不需要上网
tldr:有没有办法在不连接互联网的情况下发出内部请求(使用方法的路径)?
–
我为什么需要它?我有一个接收很多事件的项目.由谁来决定谁将处理每个事件.所以我有类似的东西:
@RestController
@RequestMapping("/events")
public class EventHandlerAPI {
@Autowired
private EventAHandler eventAhandler;
@Autowired
private EventBHandler eventBhandler;
@PostMapping("/a")
public void handleEventA(@RequestBody EventA event) {
eventAhandler.handle(id,event);
}
@PostMapping("/b")
public void handleEventB(@RequestBody EventB event) {
eventBhandler.handle(id,event);
}
}
我们最近增加了对通过队列服务接收事件的支持.它向我们发送有效负载和事件类.我们的决定是让两个接口都正常工作(休息和排队).避免代码重复的解决方案是让Controller选择哪个处理程序来处理事件.如今的代码与此类似:
@Configuration
public class EventHandlerQueueConsumer {
@Autowired
private EventHandlerAPI eventHandlerAPI;
private Map<Class,EventHandler> eventHandlers;
@postconstruct
public void init() {
/* start listen queue */
declareEventHandlers();
}
private void declareEventHandlers() {
eventHandlers = new HashMap<>();
eventHandlers.put(EventAHandler.class,(EventHandler<EventAHandler>) eventHandlerAPI::handleEventA);
eventHandlers.put(EventBHandler.class,(EventHandler<EventBHandler>) eventHandlerAPI::handleEventB);
}
private void onEventReceived(AbstractEvent event) {
EventHandler eventHandler = eventHandlers.get(event.getClass());
eventHandler.handle(event);
}
private interface EventHandler<T extends AbstractEvent> {
void handle(T event);
}
}
这段代码有效,但是它不允许控制器选择谁来处理事件(我们的意图).该决定实际上是由地图做出的.
我想做的是通过请求映射调用控制器方法,而无需访问互联网.像这样:
@Configuration
public class EventHandlerQueueConsumer {
// MADE UP CLASS TO SHOW WHAT I WANT
@Autowired
private ControllerInkover controllerInvoker;
@postconstruct
public void init() { /* start listen queue */ }
private void onEventReceived(AbstractEvent event) {
controllerInvoker.post(event.getPath(),new Object[] { event });
}
}
这种方式更清洁,并且让所有决策由控制器做出.
我研究了很多,却没有找到实现它的方法.在调试Spring时,我发现他是如何在dispatcherServlet之后路由请求的,但是所有spring内部使用HttpServletRequest和HttpServletResponse
总结
以上是小编为你收集整理的java-调用Spring控制器方法而不需要上网 全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Spring Boot控制器404
我在Spring
Boot中还很陌生,正在尝试构建一个简单的Web应用程序。我已经定义了一个控制器类,其中包含我对url的映射,但是在浏览器上却给了我一个白色标签页错误(404)。我无法理解为什么无法映射。我已经尝试过更改组件扫描基本程序包,但是它仍然不能将我重定向到页面“
abc”或在控制台中打印“在控制器中”。
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>bms</groupId> <artifactId>com.wellmanage.bms</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>BMS</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <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>
控制器类
package com.wellmanage.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class BookController { @RequestMapping("/") public String hello() { System.out.println("in controller"); return "abc"; }}
主班
package com.wellmanage.bms;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class BmsApplication { public static void main(String[] args) { SpringApplication.run(BmsApplication.class, args); }}
答案1
小编典典所述BmsApplication
类被置于下com.wellmanage.bms
包和默认@SpringBootApplication
注释运行使用该包作为根组件扫描。由于BookController
位于内部com.wellmanage.controller
,因此默认配置中省略了该软件包。
您有两种选择:
更改默认组件扫描设置并设置您要扫描的软件包:
@ComponentScan("com.wellmanage")@SpringBootApplicationpublic class BmsApplication { public static void main(String[] args) { SpringApplication.run(BmsApplication.class, args); }}
将主Application类移动到应用程序的根包中,以便要自动扫描的所有组件都位于其包下,例如
com.wellmanage
。
从您发布的配置来看,您似乎没有设置任何模板引擎。因此,将忽略从控制器返回的字符串“ abc”。
Spring Boot:控制器 - 404 未找到
您能否检查请求是否具有 Content-Type 标头。同样在@RequestMapping 中添加consume = "application/text" 或"application/json" 任何相关的内容。
,尝试添加 updateOrderProducts 的 @ResponseBody 方法
,该项目直接从 Intellij IDEA 运行。
因此,就我而言,解决方案是 Invalidate caches
。
我们今天的关于使用Spring控制器处理错误404和spring 控制器的分享就到这里,谢谢您的阅读,如果想了解更多关于java – 如何使用Jquery AJAX调用Spring控制器方法、java-调用Spring控制器方法而不需要上网、Spring Boot控制器404、Spring Boot:控制器 - 404 未找到的相关信息,可以在本站进行搜索。
本文标签: