我正在使用neba库以及apache吊索。
现在我的弹簧控制器可以使用此代码。
@RestController
public class CategoryController {
@RequestMapping(value = "/category/list", method = RequestMethod.GET)
public String sayHello() {
return "Hello World!";
}
}
击中URL http://localhost:8080/bin/mvc.do/category/list
我正在得到响应" 你好世界!"
但是当我尝试返回这样的列表字符串时 -
@RestController
public class CategoryController {
@RequestMapping(value = "/category/list", method = RequestMethod.GET)
public List<String> sayHello() {
return new Arrays.asList(new String[]{"A","B","C"});
}
}
我得到以下例外 -
java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.Arrays$ArrayList
我的库中确实有杰克逊数据宾灵
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
我还检查了捆绑包罐,它在lib中包含这些库。仍然不确定为什么它不起作用。任何帮助都是高度应用的。
启用Spring对Controller响应,部署Jackson-Databind,Jackson-Core,Jackson-Sannotations Bundles的JSON转换的支持。然后,弹簧拾取这些捆绑包(这可能需要刷新/重新启动的吊索),并自动添加新的消息转换器,这些消息转换器使用Jackson将 @Controller方法返回的对象转换为JSON,例如:
@RestController
public class CategoryController {
@RequestMapping(value = "/category/list", method = RequestMethod.GET)
public List<String> sayHello() {
return Arrays.asList("A","B","C");
}
}
注意:实际上,必须部署这些杰克逊捆绑包。仅杰克逊包裹的可用性就不够了,因为带有NEBA的弹簧捆绑包具有可选的要求捆绑包(不是进口包)的依赖性(请参阅Neba-155,请参阅NEBA-155)。
)。NEBA示例项目现在包括杰克逊捆绑包,因此您可以将其用作尝试从控制器响应中自动JSON转换的起点。
关于蒂姆上面的评论,不是必须手动转换。Spring MVC可以通过请求的" Accept"标头和可用的Spring消息转换器自动基于内容 - 访问,请参见
中的 $ 28.10.2 HTTP消息转换。希望有帮助!
如果要使用RestController和Jackson返回JSON,则必须使用 ObjectMapper 这样:
@RestController
public class CategoryController {
//Add produces application/json
@RequestMapping(value = "/category/list", method = RequestMethod.GET, produces = "application/json")
public List<String> sayHello() {
ObjectMapper mapper = new ObjectMapper();
//Object to JSON in String
String jsonInString = mapper.writeValueAsString(new Arrays.asList(new String[]{"A","B","C"}));
return jsonInString;
}
}