java.lang.UnsupportedOperationException添加到列表

时间:2017-04-30 10:50:41

标签: java spring

我有一些非常奇怪的问题。我想调用名为document.getElementById('inputTextToSave').innerHTML= output0 + output + output2; 的方法,但不幸的是服务器抛出错误,但我不知道为什么。 这是我的示例REST控制器

create

}

我无法添加用户,因为服务器会抛出"内部服务器错误",但我不知道,为什么。

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import pl.toby.model.User;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/index")
public class HelloController {

private List<User> users;

public HelloController() {
    users = Arrays.asList(
            new User(1, "Jan", "Kowalski"),
            new User(2, "Anna", "Nowak"),
            new User(3, "Andrzej", "Przybylski"),
            new User(4, "Maciej", "Adamczyk"),
            new User(5, "Jacek", "Król")
    );
}

// here is method, that I can create user
// i call it with /index/create request URI
@RequestMapping(value = "/create", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<User> create(@RequestBody User user) {
    users.add(user);

    return users;
}

修改

行动。我忘了。这是我的Tomcat错误日志

{
  "timestamp": 1493548738275,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "java.lang.UnsupportedOperationException",
  "message": "No message available",
  "path": "/index/create"
}

2 个答案:

答案 0 :(得分:5)

您使用的是Arrays.asList方法,这里是Javadoc所说的内容:

  

返回由指定数组支持的固定大小的列表。 (改为   返回的列表&#34;通过&#34;到数组。)此方法充当   基于数组和基于集合的API之间的桥梁,结合起来   与Collection.toArray()。返回的列表是可序列化的   实现RandomAccess。

因此,它返回一个固定大小的列表,由数组支持。您无法执行add / remove操作的列表(这就是为什么会抛出UnsupportedOperationException)。如果要添加或删除元素,请尝试以下操作:

users = new ArrayList<>();
users.add(new User(1, "Jan", "Kowalski"));
users.add(new User(2, "Anna", "Nowak"));
users.add(new User(3, "Andrzej", "Przybylski"));
users.add(new User(4, "Maciej", "Adamczyk"));
users.add(new User(5, "Jacek", "Król"));

答案 1 :(得分:2)

这不是Spring的问题,而是你如何初始化Arraylist。 您可以使用以下代码重现问题

public static void main(String[] args) {
    List<String> users = Arrays.asList(
                "a","b"
        );
    users.add("c");
}

这是因为您使用Arrays.asList将列表初始化为固定列表并且无法修改

  

返回由指定数组

支持的固定大小列表

如果您修改了添加列表中元素的方式,您将能够尝试端点

示例:

users = new ArrayList<>();
    users.add(new User(1, "Jan", "Kowalski"));
    users.add(new User(2, "Anna", "Nowak"));
    users.add(new User(3, "Andrzej", "Przybylski"));
    users.add(new User(4, "Maciej", "Adamczyk"));
     users.add(new User(5, "Jacek", "Król"));