GVKun编程网logo

使用Spring控制器处理错误404(spring 控制器)

15

对于想了解使用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 控制器)

使用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控制器方法

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控制器方法而不需要上网

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控制器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,因此默认配置中省略了该软件包。

您有两种选择:

  1. 更改默认组件扫描设置并设置您要扫描的软件包:

    @ComponentScan("com.wellmanage")@SpringBootApplicationpublic class BmsApplication {    public static void main(String[] args) {        SpringApplication.run(BmsApplication.class, args);    }}
  2. 将主Application类移动到应用程序的根包中,以便要自动扫描的所有组件都位于其包下,例如com.wellmanage

从您发布的配置来看,您似乎没有设置任何模板引擎。因此,将忽略从控制器返回的字符串“ abc”。

Spring Boot:控制器 - 404 未找到

Spring Boot:控制器 - 404 未找到

您能否检查请求是否具有 Content-Type 标头。同样在@RequestMapping 中添加consume = "application/text" 或"application/json" 任何相关的内容。

,

尝试添加 updateOrderProducts 的 @ResponseBody 方法

,

该项目直接从 Intellij IDEA 运行。

因此,就我而言,解决方案是 Invalidate caches

我们今天的关于使用Spring控制器处理错误404spring 控制器的分享就到这里,谢谢您的阅读,如果想了解更多关于java – 如何使用Jquery AJAX调用Spring控制器方法、java-调用Spring控制器方法而不需要上网、Spring Boot控制器404、Spring Boot:控制器 - 404 未找到的相关信息,可以在本站进行搜索。

本文标签: