能否基于JDK1.4以非注解方式开发Spring RESTful端点?
解答你的Spring REST开发与部署疑问
1. 基于JDK 1.4开发非注解式Spring RESTful端点是可行的
首先,你需要选择Spring 2.x系列版本(Spring 3.x及以上开始要求JDK 5+,而注解特性正是JDK 5才引入的),这个系列完全兼容JDK 1.4和Servlet 2.4规范,完美匹配你的OC4J 10.1.3环境。
你可以完全通过XML配置而非注解来定义REST端点,核心实现思路如下:
- 编写传统Spring MVC控制器(实现
Controller接口或继承AbstractController等基类) - 在XML配置文件中通过
SimpleUrlHandlerMapping映射URL到对应控制器 - 配置处理器适配器(如
SimpleControllerHandlerAdapter)和消息转换器(如果需要返回JSON/XML,可选用兼容JDK1.4的库如Jackson 1.x)
举个简单的实现示例:
控制器代码(无注解)
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class UserRestController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { // 模拟获取用户数据 User user = new User(1, "Shashanka"); // 手动序列化JSON(或用Jackson 1.x等兼容JDK1.4的库) String json = "{\"id\": " + user.getId() + ", \"name\": \"" + user.getName() + "\"}"; response.setContentType("application/json"); response.getWriter().write(json); return null; // 直接输出响应,无需视图解析 } } // 简单的User实体类(JDK1.4需手动编写getter) class User { private int id; private String name; public User(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } }
Spring MVC XML配置(WEB-INF/applicationContext.xml)
<beans xmlns="http://www.springframework.org/schema/beans" 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-2.5.xsd"> <!-- 注册控制器Bean --> <bean id="userRestController" class="com.example.UserRestController"/> <!-- URL与控制器的映射配置 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/user">userRestController</prop> </props> </property> </bean> <!-- 配置处理器适配器,识别传统控制器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> </beans>
最后记得在web.xml中配置Spring的DispatcherServlet,映射REST请求路径即可,全程无需任何注解。
2. 确实无法在OC4J 10.1.3部署SpringBoot RESTful服务
你的判断完全准确:
- SpringBoot的最低JDK要求是1.6(哪怕是最早期的SpringBoot 1.x版本),而你的环境是JDK 1.4,版本直接不达标;
- 此外,SpringBoot 1.x要求Servlet容器支持Servlet 2.5及以上,但OC4J 10.1.3仅支持Servlet 2.4,规范版本不兼容;
- 最后,SpringBoot默认的内嵌容器打包模型,和OC4J的传统WAR部署模型也存在冲突,即使强行调整打包方式,也会因为JDK和Servlet规范的双重限制无法正常运行。
所以在当前环境下,SpringBoot确实不是可行选项,基于Spring 2.x的非注解方式才是适配性最好的方案。
内容的提问来源于stack exchange,提问作者Shashanka Jena
相关产品推荐
相关产品推荐

