我正在构建我的第一个API。 GET请求有效,但我遇到错误415不支持的mediatype的POST请求。经过一些搜索和重写代码后,它仍然失败。有人明白为什么吗?参数值为:
-String userName
-String password
-String phone
-String email
-List roles
CODE: UserResource:
@RolesAllowed("OWNER")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void create(@PathParam( "userName" ) String userName,@PathParam( "password" ) String password,@PathParam( "phone" ) String phone,@PathParam( "email" ) String email,@PathParam( "roles" ) List<String> roles)
{
User user = new User();
user.setName(userName);
user.setPassword(password);
user.setPhone(phone);
user.setEmail(email);
user.setRoles(roles);
userService.createUser(user);
}
UserService:
public void createUser(User user){
userDAO.create(user);
}
UserDAO的:
public void create( User user )
{
save( user );
}
POST请求:
localhost:8080/User/?userName=Daniel&password=test&phone=0634554567&email=daniel@email.com&roles=["OWNER"]
答案 0 :(得分:2)
您有两个问题:
@Consumes(MediaType.APPLICATION_JSON)
。您的请求与json没有任何关系。 @PathParam
应替换为@RequestParam
s。这些值将作为请求参数(查询字符串)读取,而不是作为路径部分读取。 此外,在请求示例中,您应该在/
之后删除额外的User
:
localhost:8080/User?userName=Daniel&...
为了使用路径参数,您应该为资源方法配置添加路径注释,例如:
@RequestMapping("/{userName}/{password}/{phone}/{email}/{roles}
并且请求应该看起来像:
localhost:8080/User/Daniel/test/0634554567/daniel/OWNER
根本不直观
最后一件事:List<String> roles
错了。无论您使用路径还是查询参数,Spring都不会转换为字符串列表。您必须自己将角色拆分为数组(可能使用,
作为分隔符)或提供Converter
。