Сначала посмотрите на следующий код
public interface DemoInterface {
@RequestMapping(value = "/test", method = RequestMethod.GET)
String test(@RequestParam String message);
}
Тогда я позволю классу реализовать этот интерфейс с аннотациями
@Controller
public class DemoClass implements DemoInterface{
@Override
public String test(String message) {
/** TODO something useing the message **/
}
}
Это не проблема, я могу получить доступ к своему методу теста через http://ip:port/test?message=something.
Но когда мне нужно передать класс вместо строки:
public interface DemoInterface {
@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json")
String test(@RequestBody User user);
}
public class User{
private String name;
/** some other fileds、 geters and seters **/
}
@Controller
publci class DemoClass implements DemoInterface{
@Override
public String test(User user) {
/** TODO something useing the user's fileds **/
}
}
В настоящее время, хотя я могу получить доступ к http://ip:port/test,, когда я задаю тело запроса для json в клиенте рестлета браузера Google Chrome, я не могу получить пользовательское значение в тестовом методе, имя всегда пустое , Мой JSON выглядит так:
{"name":"Vincent Kang"}
Это потому, что я не могу получить аннотации для формальных параметров в методах, которые я наследую? Поскольку я обнаружил, что даже в последнем случае, используя http://ip:port/test?name=Kanghouchao,, я все еще могу получить имя в методе теста,
RequestBody кажется недействительным.