如何使用@ResponseBody 返回一个 map<string, string>?

Bin*_*Yin 6 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;
  }  
}
Run Code Online (Sandbox Code Playgroud)

我想map<string, string>为请求返回一个,它发生了

HTTP-406 不可接受

如何实现方法以返回带有地图的响应正文,并且它像 json 对象一样显示?

Men*_*han 6

如果您的控制器仅返回 json (REST API),则使用注释 Class@RestController而不是@Controller. 那么您不需要@ResponseBody为每个 Endpoint 添加注释。由于我们解决了缺少的问题,@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);
}
Run Code Online (Sandbox Code Playgroud)

ResponseEntity是 Http 响应的包装器。因为我在这里声明,所以ResponseEntity<?>我可以将任何对象作为 json 返回。(当您将错误响应作为另一个对象返回时,这是很好的)但是,如果您确定它只会返回 Map 对象,您可以将其写为ResponseEntity<Map>(如果您有单独的错误处理程序)希望这一点很清楚。


Nik*_*sev -1

返回地图而不是对象。

 @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;
        } 
Run Code Online (Sandbox Code Playgroud)