WebService Restful方式 Post请求Java无法获取到前台请求的参数,请大牛帮忙!!!

时间:2022-06-07 21:06:49
这2天学习搭建WebService Restful,  前台发送Post请求的参数 Service层中一直无法获取参数。。
JDK:1.7
apache-tomcat-7.0.59
CXF 2.4
Spring 3.1


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ssm</display-name>
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>

   <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>
               org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

<servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
<description>spring监听器</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

</web-app>


service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jaxws="http://cxf.apache.org/jaxws"
   xmlns:jaxrs="http://cxf.apache.org/jaxrs"  
xsi:schemaLocation=" 
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
  http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.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   ">
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 
  <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> 
    <jaxrs:server id="userServiceRest" address="/service">
     <jaxrs:serviceBeans>
     <ref bean="userService"/>
     </jaxrs:serviceBeans>
     <jaxrs:providers>  
           <ref bean="jsonProvider"/>
        </jaxrs:providers> 
    </jaxrs:server>
    
</beans>


applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
    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-3.0.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  ">
           
    <import resource="service.xml"/>
    <context:component-scan base-package="service" />

<!-- JNDI外部名称 -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/myoracle</value>
</property>
</bean>

<!-- 配置事务管理器 -->
<bean name="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 配置事务切面 -->
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(public * service.*.*(..))"  advice-ref="txAdvice" />
</aop:config>

<!-- 配置切面方法及使用的事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="*" read-only="false" />
</tx:attributes>
</tx:advice>

<!-- 配置Mybatis的SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 配置MyBatis XML与DAO的映射 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="dao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>


UserVO
package entityVO;

public class UserVO  {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "UserVO [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}


IUserService 接口
package service;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import entityVO.UserVO;

@Path("/userService")
@Produces(MediaType.APPLICATION_JSON)
public interface IUserService {
@GET
@Path("/findUserInfo")
public UserVO findUserInfo(@QueryParam("") UserVO user);

@GET
@Path("/findUser/{username}/{password}")
public UserVO findUser(@PathParam("")UserVO user);

@POST
@Path("/findUserList/{username}")
public List<UserVO> findUserList(@QueryParam("")UserVO user,@PathParam("username")String userName);

@POST
@Path("/findUserList")
public List<UserVO> findUserList(@QueryParam("")UserVO user);

@POST
@Path("/findUserList2")
public List<UserVO> findUserList2(UserVO user);
}


UserService 实现类
package service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import service.IUserService;
import dao.IUserDao;
import entityVO.UserVO;
@Named
public class UserService implements IUserService {
@Inject
IUserDao userDao;
UserVO userVO=new UserVO();
UserService(){
userVO.setId(1);
userVO.setPassword("密码");
userVO.setUsername("账号");
}
public UserVO findUserInfo(UserVO user) {
System.out.println(user);
return userVO;
}

public UserVO findUser(UserVO user) {
System.out.println(user);
return userVO;
}

public List<UserVO> findUserList(UserVO user, String userName) {
System.out.println(user);
System.out.println(userName);
List<UserVO> userList=new ArrayList<UserVO>();
for(int i=0;i<15;i++){
userList.add(userVO);
}
return userList;
}

public List<UserVO> findUserList(UserVO user) {
System.out.println(user);
List<UserVO> userList=new ArrayList<UserVO>();
for(int i=0;i<15;i++){
userList.add(userVO);
}
return userList;
}
public List<UserVO> findUserList2(UserVO user) {
System.out.println(user);
List<UserVO> userList=new ArrayList<UserVO>();
for(int i=0;i<15;i++){
userList.add(userVO);
}
return userList;
}
}


index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $.ajax({
  /* url:"services/service/userService/findUserList", */
  url:"services/service/userService/findUserList2",
  /* url:"services/service/userService/findUserList/张三", */
  type:"POST",
  data:{username:"张三",password:"密码"},
  contentType:"application/json", 
  aync:false,
  /* processData: false, //设置 processData 选项为 false,防止自动转换数据格式 */
  success:function(result){
  /* debugger;
  console.log(result); */
  }
  });
});
</script>
<title>Insert title here</title>
</head>
<body>
<h1 id="result"></h1>
</body>
</html>


我在公司的项目里定义的接口方法Post 可以拿VO接收前台请求的JSON字符,可以自动转化成VO  自己搭建就不可以 请求成功了但VO的属性都是空的 是少了什么配置或者哪里错误了吗?请大牛们指导指导纠结好久了。。。
WebService Restful方式 Post请求Java无法获取到前台请求的参数,请大牛帮忙!!!WebService Restful方式 Post请求Java无法获取到前台请求的参数,请大牛帮忙!!!

7 个解决方案

#1


good luck

#2


json字符串里面有值么?  

#3


收不到参数的话就把程序简化,比如按照同样的方式,就写个最简单的sample看看能不能得到参数,然后逐步增加条件,看看是哪一步出得问题。
发布web service并不需要配置xml,你要做的就是鼠标点击几下,然后系统会根据class自动生成一个web service 文件,把这个文件放到tomcat下,就可以得到wsdl。如果你用的工具是要配xml的,就换一个,用不好的工具只会给自己造成麻烦,并且就算你掌握了,也对你的技术水平没有什么帮助。

#4


引用 2 楼 shijing266 的回复:
json字符串里面有值么?  

这是我前台调用的代码  用POST方法  传参 data:{username:"张三",password:"密码"}都有值。。就是Service里拿不到传的值

 $(document).ready(function(){
         $.ajax({
             /* url:"services/service/userService/findUserList", */
             url:"services/service/userService/findUserList2",
             type:"POST",
             data:{username:"张三",password:"密码"},
             contentType:"application/json", 
             aync:false,
             /* processData: false,    //设置 processData 选项为 false,防止自动转换数据格式 */
             success:function(result){
                 /* debugger;
                 console.log(result); */
             }
         });
    });

#5


引用 3 楼 Raffin 的回复:
收不到参数的话就把程序简化,比如按照同样的方式,就写个最简单的sample看看能不能得到参数,然后逐步增加条件,看看是哪一步出得问题。
发布web service并不需要配置xml,你要做的就是鼠标点击几下,然后系统会根据class自动生成一个web service 文件,把这个文件放到tomcat下,就可以得到wsdl。如果你用的工具是要配xml的,就换一个,用不好的工具只会给自己造成麻烦,并且就算你掌握了,也对你的技术水平没有什么帮助。


我这是结合了Spring和CXF 所以配置了XML,而且我就只做了一个页面加载发送POST请求已经是最简化了。。GET方式都可以拿到值 就POST无法取值

#6


进过几天查询资料终于找到处理方法。把前台请求的DATA参数进行JSON.stringify处理下就可以了

#7


在下看到,应该是你 IUserService 接口的第16行,@Produces(MediaType.APPLICATION_JSON),注解写错了吧,应该用@Consumes({MediaType.APPLICATION_JSON) 吧,

2、 consumes,produces;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

在下刚入行,请多指点,,小刘,微信roadbiker,在新泽西

#1


good luck

#2


json字符串里面有值么?  

#3


收不到参数的话就把程序简化,比如按照同样的方式,就写个最简单的sample看看能不能得到参数,然后逐步增加条件,看看是哪一步出得问题。
发布web service并不需要配置xml,你要做的就是鼠标点击几下,然后系统会根据class自动生成一个web service 文件,把这个文件放到tomcat下,就可以得到wsdl。如果你用的工具是要配xml的,就换一个,用不好的工具只会给自己造成麻烦,并且就算你掌握了,也对你的技术水平没有什么帮助。

#4


引用 2 楼 shijing266 的回复:
json字符串里面有值么?  

这是我前台调用的代码  用POST方法  传参 data:{username:"张三",password:"密码"}都有值。。就是Service里拿不到传的值

 $(document).ready(function(){
         $.ajax({
             /* url:"services/service/userService/findUserList", */
             url:"services/service/userService/findUserList2",
             type:"POST",
             data:{username:"张三",password:"密码"},
             contentType:"application/json", 
             aync:false,
             /* processData: false,    //设置 processData 选项为 false,防止自动转换数据格式 */
             success:function(result){
                 /* debugger;
                 console.log(result); */
             }
         });
    });

#5


引用 3 楼 Raffin 的回复:
收不到参数的话就把程序简化,比如按照同样的方式,就写个最简单的sample看看能不能得到参数,然后逐步增加条件,看看是哪一步出得问题。
发布web service并不需要配置xml,你要做的就是鼠标点击几下,然后系统会根据class自动生成一个web service 文件,把这个文件放到tomcat下,就可以得到wsdl。如果你用的工具是要配xml的,就换一个,用不好的工具只会给自己造成麻烦,并且就算你掌握了,也对你的技术水平没有什么帮助。


我这是结合了Spring和CXF 所以配置了XML,而且我就只做了一个页面加载发送POST请求已经是最简化了。。GET方式都可以拿到值 就POST无法取值

#6


进过几天查询资料终于找到处理方法。把前台请求的DATA参数进行JSON.stringify处理下就可以了

#7


在下看到,应该是你 IUserService 接口的第16行,@Produces(MediaType.APPLICATION_JSON),注解写错了吧,应该用@Consumes({MediaType.APPLICATION_JSON) 吧,

2、 consumes,produces;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

在下刚入行,请多指点,,小刘,微信roadbiker,在新泽西