gpt4 book ai didi

java - 使用 Spring MVC 的简单 REST 服务,配置问题

转载 作者:行者123 更新时间:2023-12-01 15:40:43 27 4
gpt4 key购买 nike

我正在尝试将一个简单的 REST 服务添加到使用 SpringSource Tool Suite (STS) 和 Eclipse 创建的默认 Spring MVC 模板项目中。我想要公开的 REST 服务基本上是一个不依赖于任何模型的实用程序。输入是一个字符串,我希望它返回反转的字符串。代码部分很简单,但配置却不简单。以下是我的相关文件。

我真的不明白为什么这不起作用,但是当我输入 URL http://localhost:8080/projectName/restfultest/stringreverser/testString 时我收到错误消息 在名称为“restfulServlet”的 DispatcherServlet 中未找到带有 URI [/projectName/restfultest/stringreverser/] 的 HTTP 请求的映射

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>restfulServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/restfulServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>restfulServlet</servlet-name>
<url-pattern>/restfultest/*</url-pattern>
</servlet-mapping>

</web-app>

servlet-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<context:component-scan base-package="com.sample.pkg" />



</beans:beans>

RestfulService.java

package com.sample.pkg;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(value = "/stringreverser")
public class RestfulService {

@RequestMapping(value="/{id}", method=RequestMethod.GET)
public String reverseId(@PathVariable("id") String id) {
String reversed = "";
for (int i = id.length() - 1; i <= 0; --i) {
reversed += id.charAt(i);
}

return reversed;
}
}

预先感谢您的帮助!

-乔

最佳答案

首先,你的反转函数不正确

for (int i = id.length() - 1; i <= 0; --i) {...}

如你所料,它永远不会进去 i小于或等于0开始时。

其次,这里有一些好消息

enter image description here

这是一个工作 Controller

@Controller
@RequestMapping( value="/stringreverser" )
public class HomeController {

private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

@RequestMapping( value="/{id}", method=RequestMethod.GET )
public String reverseId( @PathVariable String id, Model model ) {

StringBuilder reversed = new StringBuilder();
for ( int i = id.length() - 1; i >= 0; i-- ) {
reversed.append( id.charAt( i ) );
}

logger.debug( "\n\t [" + id + "] reversed ==> " + reversed.toString() );

model.addAttribute( "originalId", id );
model.addAttribute( "reversedId", reversed.toString() );

return "home";
}
}

Controller 名称为HomeController ,因为我使用了模板化的 Spring MVC 应用程序,您可以使用 Spring Tool Suite 单击两次即可创建该应用程序:

  • File => New => Spring Template Project
  • 选择“Spring MVC Project”,输入项目名称、顶级包(例如 org.guru.xyz ),点击Next
  • 您拥有一个全新的“Spring MVC”项目
  • 要部署它,请右键单击您的项目(位于左侧),转到“Run As”=>“Run On Server”
  • 这会将其部署到 Tomcat 并打开“localhost:8080/somemvc/”,您将在其中看到“Hello world!”

但是,它已经有一个(上面的代码中缺少的) View 解析器和 home.jsp ,您可以在上图中看到渲染的内容。

这是 home.jsp

<html>
<head> <title>Mean ID Reverser</title> </head>
<body>
<h1> Mean ID Reverser </h1>
<p> I just reversed your ID "${originalId}" => "${reversedId}" </p>
</body>
</html>

<url-pattern>/restfultest/*</url-pattern>web.xml工作得很好。

<小时/>

JSON Woodoo

为了将其作为 JJ(Just JSON)返回,您只需要做两件事:

添加 Jackson Mapper 依赖项

<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.2</version>
</dependency>

将返回类型更改为 @ResponseBody Object

@RequestMapping( value="/{id}", method=RequestMethod.GET )
public @ResponseBody Object reverseIdJson(@PathVariable String id) {
return new ReverserResult( id );
}

我包含了一个对象 ReversalResult而不是简单的字符串,以演示透明的 Jackson Mapper 魔法,并查看它确实是返回的 JSON 响应:

enter image description here

其中 ReversalResult有两个字段,一个 reverseString静态方法,它在构造函数中反转字符串:

    private String original;
private String reversed;

public ReverserResult( String reverseMe ) {
this.original = reverseMe;
this.reversed = reverseString( reverseMe );
}

这当然只是一个独立的函数,但同样,我想显示具有 1+ 个字段的对象以 JSON 形式返回。

关于java - 使用 Spring MVC 的简单 REST 服务,配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8085871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com