public class RestfulControllerImpl implements RestfulController {
@Override
@RequestMapping(value = "maptest", method = RequestMethod.GET)
@ResponseBody
public Object mapReturn() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "test1");
map.put("sex", "male");
map.put("address", "1324");
map.put("old", "123");
return map;
}
}
我想为请求返回map<string, string>
,它会发生
HTTP-406不可接受
如何实现返回带有map的响应体的方法,它像json对象一样显示?
答案 0 :(得分:1)
如果您的控制器仅返回json(REST API),则使用@RestController
而不是@Controller
注释Class。然后,您无需向每个端点添加@ResponseBody
批注。由于我们已经解决了缺少@ResponseBody
的问题,因此下面的代码将满足您的要求。
@GetMapping("/maptest")
public ResponseEntity<?> mapReturn() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "test1");
map.put("sex", "male");
map.put("address", "1324");
map.put("old", "123");
return ResponseEntity.ok(map);
}
ResponseEntity
是Http响应的包装器。由于我在这里声明为ResponseEntity<?>
,因此我可以将任何Object返回为json。 (当您将错误响应作为另一个对象返回时,这很好。)但是,如果您确定它只会返回Map Object,则可以将其写为ResponseEntity<Map>
(如果您有单独的错误处理程序)
希望这很清楚。
答案 1 :(得分:0)
4XX是客户端错误 尝试添加请求标头 接受:应用/ JSON
答案 2 :(得分:0)
@RequestMapping(value = "maptest", method = RequestMethod.GET)
public ResponseEntity<?> mapReturn() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "test1");
map.put("sex", "male");
map.put("address", "1324");
map.put("old", "123");
return new ResponseEntity(map, HttpStatus.OK); // you can change status code based on response
}
您可以设置ResponseEntity详细信息,例如正文,状态或标题。
答案 3 :(得分:0)
“HTTP-406 不可接受”主要处理内容协商你也可以在遇到这种问题时在浏览器中检查标题,可以使用 Jackson 或 Gson Dependency 获得解决方案
客户端
var jsonData = '{"name":"John", "age":30, "city":"New York"}'
var obj = JSON.parse(jsonData);
$.ajax({
type : "POST",
url : "${pageContext.request.contextPath}/getJSON",
dataType: 'json',
cache:false,
async:false,
data : obj,
success: function(data){
console.log(data.name);
console.log(data.gender);
console.log(data.address);
}
});
服务器端:
@RequestMapping(value="/getJSON")
@ResponseBody
public String mapReturnUsingJackson() throws JsonGenerationException, JsonMappingException, IOException {
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("name", "County");
hashMap.put("address", "Unknown");
hashMap.put("gender", "male");
String jsonJackson=new ObjectMapper().writeValueAsString(hashMap);
return jsonJackson;
}
//OR
@RequestMapping(value="/getJSON")
@ResponseBody
public String mapReturnUsingGSON() {
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("name", "County");
hashMap.put("address", "Unknown");
hashMap.put("gender", "male");
String jsonStr = new Gson().toJson(hashMap);
return jsonStr;
}
答案 4 :(得分:-1)
尝试将函数的返回类型更改为Map<String, String>
并添加&#34;生成&#34;到请求映射:
@RequestMapping(path="maptest", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String, String> test() {
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
return map;
}
答案 5 :(得分:-2)
返回地图而不是对象。
@RequestMapping(value = "maptest", method = RequestMethod.GET)
@ResponseBody
public Map<String,String> mapReturn() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "test1");
map.put("sex", "male");
map.put("address", "1324");
map.put("old", "123");
return map;
}
答案 6 :(得分:-2)
@ResponseBody用于返回string / json。您可能想使用模型,看看这个
http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/ui/Model.html