无法读取JSON:字段名称中意外到达输入的结尾

IT小君   2023-09-16T19:38:27

我正在开发一个Spring MVC的web应用程序。我还没有开发UI界面,所以我正在使用Advance Rest Client工具来测试我的服务。

我的控制器

@Controller
@RequestMapping("/testController")
public class TestController {

@Autowired
private TestService testService;

@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE },  produces = { MediaType.APPLICATION_JSON_VALUE })
public
@ResponseBody void testMethod(@RequestBody TestParam testParam) {

    String tenant = testParam.getTenantCode();
    String testString = tenant + " 是租户";
}
}

TestParam.java类

public class TestParam {

private String testVar;
private String tenantCode;

public String getTenantCode() {
    return tenantCode;
}

public void setTenantCode(String tenantCode) {
    this.tenantCode = tenantCode;
}

public String getTestVar() {
    return testVar;
}

public void setTestVar(String testVar) {
    this.testVar = testVar;
}
}

我使用Advance Rest Client发送请求,并且头部和请求链接已经设置正确。

{"testVar":"测试","tenantCode":"DEMO"}

请求链接

http://localhost:8080/myApp/controller/testController/test

当TestParam只有一个变量时,它可以正常工作。当变量变为两个或更多时,它会出现错误,并且无法调用testMethod。

异常是com.fasterxml.jackson.core.JsonParseException:  在字段名称处遇到意外的输入结束 [Source:org.apache.catalina.connector.CoyoteInputStream@7b24d498; line: 1, column: 43]
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:181)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:173)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:135)

我阅读了更多的文章,但仍然找不到答案。

评论(3)
IT小君

增加Content-Length:header中有效

2023-09-16T19:38:30   回复
IT小君

你的json格式是什么?我认为json格式使用字面上的\n作为分隔符,请确保JSON操作和源不是美化打印的。

2023-09-16T19:38:34   回复
IT小君

ARC中存在一个问题,即没有有效载荷,而响应的类型是json。解析器会因为空字符串而抛出错误,导致响应报告崩溃。

2023-09-16T19:38:39   回复