问题
I am building my first API. The GET request works, but i am stuck at a POST request with error 415 Unsupported mediatype. After some searching and rewriting code, it still fails. Does someone see why? The parameter values are :
-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 );
}
the POST request:
localhost:8080/User/?userName=Daniel&password=test&phone=0634554567&email=daniel@email.com&roles=["OWNER"]
回答1:
You have two issues:
- Omit
@Consumes(MediaType.APPLICATION_JSON)
. Your request has nothing whatsoever to do with json. @PathParam
s should be replaced with@RequestParam
s. The values are read as request parameters (query string) and not as path parts.
Also, in the request example you should get rid of the extra /
after User
:
localhost:8080/User?userName=Daniel&...
In order to use path parameters, you should add a path annotation to the resource method configuration, something such as:
@RequestMapping("/{userName}/{password}/{phone}/{email}/{roles}
and the request should look something such as:
localhost:8080/User/Daniel/test/0634554567/daniel/OWNER
Which is not intuitive at all
And one last thing: List<String> roles
is wrong. Spring won't convert to a list of strings, no matter if you use path or query parameter. You will have to split the roles into array yourself (probably using ,
as a separator) or supply a Converter
.
来源:https://stackoverflow.com/questions/40218320/java-mongodb-post-415-unsupported-mediatype