我需要在现有的JSP / Servlets项目中添加REST支持。我想使用Spring因为它的社区和它的可能性。我必须实现几个功能,我相信Spring可以帮助我实现它
我没有在互联网上找到任何涵盖前两个陈述的帖子。有许多带有自动配置的Spring启动示例和没有REST的spring-mvc 3.x
关于身份验证的第3个目标,我想我可以为这样的方法创建自定义注释:
@RequestMapping("/rest/greeting")
@MyAuthCheck(group="admin")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
...
此处显示当前代码https://github.com/anteastra/spring-rest-jsp。第三次提交 我做了以下步骤
为项目添加了弹簧库,我从Maven Spring Rest教程获得的库列表:
aopalliance-1.0
commons-logging-1.2
jstl-1.2
spring-aop-4.2.3.RELEASE
spring-beans-4.2.3.RELEASE
spring-context-4.2.3.RELEASE
spring-core-4.2.3.RELEASE
spring-expression-4.2.3.RELEASE
spring-web-4.2.3.RELEASE
spring-webmvc-4.2.3.RELEASE
将DispatcherServlet添加到web.xml
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/welcome.jsp</url-pattern>
<url-pattern>/welcome.html</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
添加了RestController
package com.app;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.domain.Greeting;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
在web.xml中添加了用于组件扫描的rest-servlet
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.app" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
在与Spring-MVC相关的代码中还有一些额外的东西,而不是REST部分。例如,有一个@Controller
。
然后我启动tomcat它的日志说所有映射都正确:
дек 13, 2015 8:04:34 PM org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
INFO: Mapped URL path [/greeting] onto handler 'greetingController'
дек 13, 2015 8:04:34 PM org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
INFO: Mapped URL path [/greeting.*] onto handler 'greetingController'
дек 13, 2015 8:04:34 PM org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
INFO: Mapped URL path [/greeting/] onto handler 'greetingController'
然后我对我得到的/ rest /问候语执行GET请求:
HTTP状态404 - /WEB-INF/jsp/greeting.jsp
我发现有人认为这是因为错过了@ResponseBody注释。
我认为Spring 4.x中不需要这个注释,但我补充道
@ResponseBody
要检查:
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public @ResponseBody Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
有“HTTP状态406”,此请求标识的资源只能根据请求“接受”标题生成具有不可接受特征的响应。
好的,我修改了@RequestMapping
@RequestMapping(value="/greeting", produces={"application/json", "application/xml"}, consumes={"application/json", "application/xml"})
但我仍然有HTTP状态406 in soapUI
如何使用Spring 4.x实现我的目标?