表格数据:
form dat from UI developer tools
user.username:SS
user.email:SGFG@GMAIL.COM
user.firstName:WWW
user.lastName:FF
ext-gen1170:ENV_DEV
ext-gen1171:false
ext-gen1172:false
user.password:
userGroupPermissions:[{"userName":"SS","groupName":"ENV_DEV","permission":"*"}]
调度程序servlet的Web.xml:
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/spring/</url-pattern>
</servlet-mapping>
控制器:
@RequestMapping(value ="/createUser/", method = RequestMethod.POST)
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@ResponseBody
public String createUser(@RequestParam(value = "user.username", required = true) String username,
@RequestParam(value = "user.email", required = true) String email,
@RequestParam(value = "user.firstName", required = true) String firstName,
@RequestParam(value = "user.lastName", required = true) String lastName,
@RequestParam(value = "userGroupPermissions", required = true) UserGroupPermission userGroupPermissions,
@RequestParam(value = "password", required = false) String password) throws IOException {
将添加以上详细信息以处理请求
控制台中没有错误,但是当我在控制器中保留断点时,没有命中断点。
我的代码是404.
EXTJS: var url ='/ spring / createUser';
答案 0 :(得分:1)
有两种解决方法 - 更改将参数发送到Java或更改接收参数的方式。
为了简单起见,你应该改变Java。
@RequestParam
个参数。@RequestBody
参数。所以Spring控制器看起来应该是这样的:
@RequestMapping(value ="/createUser/", method = RequestMethod.POST)
@ResponseBody
public String createUser(@RequestBody UserParams params)
显然,如果你需要@Transactional
部分,你也应该离开它。
以下是有关如何使用Ext.Ajax.request
发送各种类型请求的一些示例。
我已经在值中使用了波兰语,因此您还可以看到UTF-8文本的编码是如何工作的。
在查询字符串中发送意味着事件在?
之后直接在URL中编码。例如。 /test?firstName=Imi%C4%99&lastName=Nazwisko
。
// (Java/Spring can get this with `@RequestParam`)
Ext.Ajax.request({
url: '/test',
method: 'GET',
params: {
firstName: 'Imię',
lastName: 'Nazwisko'
}
});
在以标准方式发送表单时使用。事物在请求正文中编码,但格式实际上与查询字符串相同(例如firstName=Imi%C4%99&lastName=Nazwisko
)。
// (Java/Spring can get this with `@RequestBody`)
Ext.Ajax.request({
url: '/test',
method: 'PUT',
params: {
firstName: 'Imię',
lastName: 'Nazwisko'
}
});
这是一个JSON通信。事物在请求正文中编码,但采用JSON格式(例如{"firstName":"Imi\u0119","lastName":"Nazwisko"}
)。
// (Java/Spring can get this with `@RequestBody`)
Ext.Ajax.request({
url: '/test',
method: 'PUT',
jsonData: {
firstName: 'Imię',
lastName: 'Nazwisko'
}
});
在您可以欺骗ExtJS在URL中传递参数,而不是请求正文。如果params
中存在jsonData
和Ext.Ajax.request
,则必须将其中一个放入网址。
所以要在查询字符串中传递params,请使用:
Ext.Ajax.request({
url: '/test',
method: 'PUT',
params: {
firstName: 'Imię',
lastName: 'Nazwisko'
},
jsonData: {}
});
请注意空jsonData
。这将在请求正文中编码为{}
,并且可以在接收端简单地省略。在本例中为Java / Spring。
所以这样你就可以在Spring控制器中收到所有参数作为@RequestParam
参数。