Путаница для @RequestMapping, решающей одно значение и список значений - PullRequest
0 голосов
/ 25 апреля 2019

Я создал класс с именем User, и я хочу проверить @RequestMapping с помощью POST и GET. Я создал 2 метода, один для одного объекта, а другой для списка объектов. Однако, когда я проверяю GET на методе возврата одного объекта, который допускает только POST, он возвращает значение обратно, а значения представляют собой список объектов. Так почему это вызывает?

@RestController
public class WebController {
 @PostMapping(name="/getUser123")
    public User getUser(){
        User user=new User();
        user.setName("mint");
        user.setAge(19);
        user.setPass("123456");
        return user;
    }

    @RequestMapping(name="/changeWholeName")
    public List<User> changeWholeName(){
        List<User> users =new ArrayList<User>();
        User user1=new User();
        user1.setName("mint1");
        user1.setAge(19);
        user1.setPass("123456");
        users.add(user1);
        User user2=new User();
        user2.setName("mint3");
        user2.setAge(192);
        user2.setPass("1234516");
        users.add(user2);
        return users;
    }
}

Используйте GET для проверки первого метода, GET localhost:8080/getUser, и перейдите ко второму методу, верните список значений. Почему и как это решить? Большое спасибо ~

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

name - это Assign a name to this mapping. Вы должны изменить name на value

@PostMapping(value="/getUser123")
    public User getUser(){
        User user=new User();
        user.setName("mint");
        user.setAge(19);
        user.setPass("123456");
        return user;
    }

    @RequestMapping(value="/changeWholeName")
    public List<User> changeWholeName(){
        List<User> users =new ArrayList<User>();
        User user1=new User();
        user1.setName("mint1");
        user1.setAge(19);
        user1.setPass("123456");
        users.add(user1);
        User user2=new User();
        user2.setName("mint3");
        user2.setAge(192);
        user2.setPass("1234516");
        users.add(user2);
        return users;
    }

Для более подробной информации:

Вы можете прочитать эту страницучтобы получить более подробную информацию о name https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.html#fromMappingName-java.lang.String-.

Я предполагаю, что ваш класс @Controller передает запрос к localhost:8080/getUser с методом по умолчанию GET.Поэтому он будет вызывать changeWholeName(), потому что метод обрабатывает запрос GET.Поскольку вы использовали имя вместо значения, Spring понимает ваш код следующим образом:

@RestController
@RequestMapping("/getUser")
public UserController {
@RequestMapping(value="", name="/changeWholeName") //Handle HTTP GET to /getUser
    public List<User> changeWholeName(){
    }
}
0 голосов
/ 25 апреля 2019

Оба метода возвращают некоторые данные, тогда к обоим следует обращаться с помощью запроса GET.

Доступ к этому методу можно получить с помощью http://localhost:8080/getUser123

    @GetMapping(value="/getUser123")
    public User getUser(){
        User user=new User();
        user.setName("mint");
        user.setAge(19);
        user.setPass("123456");
        return user;
    }

Вы можете получить доступ к этому методу, http://localhost:8080/changeWholeName

    @GetMapping(value="/changeWholeName")
    public List<User> changeWholeName(){
        List<User> users =new ArrayList<User>();
        User user1=new User();
        user1.setName("mint1");
        user1.setAge(19);
        user1.setPass("123456");
        users.add(user1);
        User user2=new User();
        user2.setName("mint3");
        user2.setAge(192);
        user2.setPass("1234516");
        users.add(user2);
        return users;
    }
0 голосов
/ 25 апреля 2019

Я не очень понимаю, что вы пытаетесь сделать, пожалуйста, будьте точнее.

Но прежде всего ваш метод POST getUser возвращает пользователя и поэтому должен быть помечен @GetMapping("/getUser123") или @RequestMapping(value = "/getUser123", method = RequestMethod.GET), что то же самое. Вы видите, что вы должны определить метод HTTP, который будет использоваться при использовании @RequestMapping.

И вы должны называть свои методы в соответствии с тем, что они делают, иначе это вызывает путаницу.

Подробнее о аннотациях контроллера Spring можно прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...