@RequestMapping解决一个值和一个列表值的困惑

时间:2019-04-25 08:14:23

标签: spring spring-boot spring-mvc

我已经创建了一个名为User的类,并且我想使用POST和GET测试@RequestMapping。我创建了2种方法,一种用于一个对象,另一种用于一个对象列表。但是,当我在仅允许POST的返回一个对象方法上测试GET时,它将返回值,并且值是对象列表。那为什么会导致呢?

@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 个答案:

答案 0 :(得分:1)

nameAssign 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(){
    }
}

答案 1 :(得分:0)

我不太了解您要做什么,请更加准确。

但是首先您的POST方法getUser返回一个User,因此应该用相同的@GetMapping("/getUser123")@RequestMapping(value = "/getUser123", method = RequestMethod.GET)进行注释。您看到应该定义使用@RequestMapping时要使用的HTTP方法。

您应该根据方法的用途来命名您的方法,否则会造成混乱。

您可以了解有关Spring的控制器注释here的更多信息。

答案 2 :(得分:0)

这两个方法都返回一些数据,然后应该使用GET请求访问这两个数据。

  

您可以通过http://localhost:8080/getUser123

访问此方法
my_string = list(input('Enter text: '))
my_string = ['!' if char == 'i' else char
             for char in my_string]
print(''.join(my_string))
  

您可以通过http://localhost:8080/changeWholeName

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