Java-Getting request.getParameter(“id”)为null
我是Java新手。尝试创建简单的CRUD应用程序。但在DB中添加记录时遇到问题,获取request.getParameter()null。我将jersey用于RESTful Web服务,将Gson用于json数据 请参阅下面的代码 爪哇 安格拉斯Java-Getting request.getParameter(“id”)为null,java,angularjs,Java,Angularjs,我是Java新手。尝试创建简单的CRUD应用程序。但在DB中添加记录时遇到问题,获取request.getParameter()null。我将jersey用于RESTful Web服务,将Gson用于json数据 请参阅下面的代码 爪哇 安格拉斯 $http({ method : 'POST', url : 'AddResource', data: empObj, headers: { 'Content-Type': 'applic
$http({
method : 'POST',
url : 'AddResource',
data: empObj,
headers: { 'Content-Type': 'application/json' }
}).then(function successCallback(response) {
if(response.data){
$scope.getEmployee();
}
}, function errorCallback(response) {
console.log("Data not coming");
});
编辑
@桑托什,正如我在评论中提到的,你可以通过两种方式来做到这一点
方法1::在JS中单独发送参数
$http({
method : 'POST',
url : 'AddResource',
data: 'id=' + id + 'firstname=' + firstname,
headers: { 'Content-Type': 'text/plain' }
}).then(function successCallback(response) {
if(response.data){
$scope.getEmployee();
}
}, function errorCallback(response) {
console.log("Data not coming");
});
然后可以像Java一样提取它们
request.getParameter('id');
request.getParameter('firstname');
String JSON = request.getParameter('empObj');
方法2::在Java中作为对象发送和拆分
$http({
method : 'POST',
url : 'AddResource',
data: 'empObj=' + empObj,
headers: { 'Content-Type': 'text/plain' }
}).then(function successCallback(response) {
if(response.data){
$scope.getEmployee();
}
}, function errorCallback(response) {
console.log("Data not coming");
});
然后可以像Java一样提取对象
request.getParameter('id');
request.getParameter('firstname');
String JSON = request.getParameter('empObj');
使用类似Gson的解析器来解析这个JSON
Gson gson = new Gson();
Employee empObj = gson.fromJson(JSON, Employee.class);
您正在将内容类型设置为
application/json
。各国的文件
以字符串形式返回请求参数的值,如果
参数不存在。请求参数是额外的信息
随请求一起发送。对于HTTP servlet,参数包含在
查询字符串或已发布的表单数据
尝试省略Content-Type参数以使用getParameter(),或者获取请求正文并从此处解析JSON字符串
//编辑:默认为application/json,因此省略内容类型将无效。要对数据进行表单编码,请参见以下问题:如果您使用的是json数据流,则不能使用
request.getParameter(“firstname”)
对于GetJSON参数,您需要读取原始数据
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
StringBuffer strJson = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null) {
strJson.append(line);
}
Employee employee = new GsonBuilder().create().fromJson(strJson.toString(), Employee.class);
int status=EmployeeDao.add(employee);
if(status > 0){
System.out.println("Record added successfully!");
}else{
System.out.println("Unable to add record");
}
out.close();
} catch(Exception ex) {
}
}
修改使用angular生成的请求,将对象作为json字符串传递到正文中,如下所示:
employer="{id:1,\"firstname\":\"John\",....}"
在servlet中:
String jsonString = request.getParameter("employer");
Gson gson = new Gson();
Employee empObj = gson.fromJson(jsonString, Employee.class);
您还可以使用pojo或EJB并将其公开为web服务,在我看来,这是一个更简单、更灵活的解决方案
@Stateless
@Path(value = "employer")
@PermitAll
public class EmployerController {
... some object or injections
@Path(value = "insert")
@Consumes("application/x-www-form-urlencoded")
@Produces(MediaType.APPLICATION_JSON)
@POST
public T create(@FormParam("employer")String entity)throws ValidationException, Exception{
ObjectMapper mapper = new ObjectMapper();
ObjectNode j;
try {
j = (ObjectNode) mapper.readTree(entity);
Employer myemp = mapper.readValue(j, Employer.class);
...do what you need...
return myemp;
} catch(Exception e){
LOG.log(Level.SEVERE,"Error",e);
throw e;
}
}
}
或者以一种更奇特的方式,您可以实现一个“fromString(stringjson)”方法,如下所示
public static MyEmpl fromString(String jsonString) throws IOException{
ObjectMapper mapper = new ObjectMapper();
MyEmpl object = mapper.readValue(jsonString, MyEmpl.class);
return object;
}
然后将前面的方法定义为:
public T create(@FormParam("employer")MyEmpl entity)throws Exception{
而反序列化程序(例如,wildlfy中的jackson)会做一些神奇的事情Yes所有参数。例如{“firstname”:“Santosh”,“lastname”:“Shelke”,“id”:123,“phone”:987098,“jobId”:“Software Eng”,“salasy”:98708}甚至System.out.println(request.getParameterMap())也被赋予了空对象。在发送请求时,在Google Chrome调试器中,当您构建了
empObj
对象时,转到控制台并键入dir(empObj)
,然后按Enter键。然后检查此对象的所有属性。它是否包含id
属性?它具有所有需要的参数。名字:“Sachin”id:“123”jobId:“87403”姓氏:“S”电话:“0384630”薪水:“20000”谢谢库马尔的回复。但我正在发送一个包含所有参数的对象。@SantoshShelke是的,我知道了,你需要在js或Java中拆分你的对象。Java无法进入您的对象并检查变量id。例如::在js中,您可以执行类似数据的操作:“id=”+id+“name=”+name。或者在java中提取empObj,比如Employee empObj=(Employee)request.getParameter('empObj'),在这种情况下,您需要发送类似Ajax的数据:“empObj=”+empobjb,但我正在发送JSON,所以应该接受它,对吗?使用“id=”获取null+empObj@SantoshShelke检查我的编辑,如果您还有问题,请告诉我。您也可以发送JSON,但由于servlet无法解析它们,因此它们将作为字符串接收。只需将内容类型更改为“内容类型”:“文本/普通”