如何使用@ResponseBody返回地图<string,string =“”>?

时间:2015-07-06 06:58:24

标签: spring spring-mvc

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对象一样显示?

7 个答案:

答案 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