java - 无法从 START_ARRAY token 中读取文档 : Can not deserialize instance of java. lang.String

标签 java json ajax rest

我需要将 ajax 请求作为 json 传递给我的休息服务。 我的模型类是

@Entity
@Table(name = "messageslist")
public class MessageList {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer id;
public String title;    
public String tags;
public String documents;
public String links;
//Then getters and setters
}

休息 Controller

@RequestMapping(value = "/AddPost", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<MessageList> addPost(@RequestBody @Valid MessageList messageList, BindingResult bindingResult,
        UriComponentsBuilder ucBuilder) {
    BindingErrorsResponse errors = new BindingErrorsResponse();
    HttpHeaders headers = new HttpHeaders();
    if (bindingResult.hasErrors() || (messageList == null)) {
        errors.addAllErrors(bindingResult);
        headers.add("errors", errors.toJSON());
        return new ResponseEntity<MessageList>(headers, HttpStatus.BAD_REQUEST);
    }

    this.taskManagerService.savePost(messageList);
    headers.setLocation(ucBuilder.path("/api/TS/{id}").buildAndExpand(messageList.getId()).toUri());
    return new ResponseEntity<MessageList>(messageList, headers, HttpStatus.CREATED);
}

来自客户端代码

var post = JSON.stringify({
        title : title,
        tags : tags,
        documents : documents,
        links : links
    });

    var url = "http://localhost:8080/TS/AddPost";
    $.ajax({
        type : 'POST',
        url : url,
        contentType : 'application/json; charset=utf-8',
        data : post,
        dataType : 'json',
        success : function(data) {
            onComplete();
        }
    });

我从ajax调用传递的json数据就像

{"title":"dhfg","tags":["Interactive","Online"],"documents":[],"links":[]}

如何从 json 传递标签数组?我是 Java 新手

错误详细信息

2017-09-24 01:40:31.978  WARN 9600 --- [nio-8081-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_ARRAY token
 at [Source: java.io.PushbackInputStream@459b29e9; line: 1, column: 24] (through reference chain: org.fs.spring.tm.model.MessageList["tags"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: java.io.PushbackInputStream@459b29e9; line: 1, column: 24] (through reference chain: org.fs.spring.tm.model.MessageList["tags"])

最佳答案

我更改了模型类中标签的数据类型

public String tags;

public ArrayList<String> tags;

解决了我的问题:)

关于java - 无法从 START_ARRAY token 中读取文档 : Can not deserialize instance of java. lang.String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386847/

相关文章:

java - 异步处理 J2EE

java - Eclipse无法解决

java - 将 JPanel 放置在 JFrame 上

java - JSON解析无值

javascript - javascript中循环本地存储对象

asp.net - 如何让 ASP.NET AJAX 使用 GZip 压缩发送其 JSON 响应?

javascript - 如何使用jquery ajax进程访问单独的PHP页面中的函数?

JavaScript JSON 对象无法解析

java - 执行更新和CURDATE()

python - 如何调试仅在生产中不起作用的ajax django View 功能