有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取映射URL的JSON结果

假设我们有以下控制器

@Controller
@RequestMapping("/Index")
public class ControllerClass {

  @RequestMapping("/Result")
  @ResponseBody
  public List<Integer> result(){
     List<Integer> result = new ArrayList<Integer>();
     result.add(1);
     result.add(2);
     return result;
  }
 }

现在我想将URL“/Index/result”的JSON结果存储到一个字符串中。或者简单地说,在应用注释后存储controller的JSON结果。请注意,它不是用于测试的,为此目的考虑的webservice问题。有什么想法吗? 提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    我建议在你的pom中加入jackson依赖项。xml,如果它们还不存在的话

    <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.2.3</version>
        </dependency>
    

    您还可以像这样更新请求映射

    @RequestMapping(value = "/Result", produces = "application/json;charset=utf-8")
    
  2. # 2 楼答案

    在通过ResponseEntity返回之前,可以将Jackson的ObjectMapper注入控制器,以手动将结果序列化到JSON

    @Configuration
    public class Config {
    
         @Bean
         public ObjectMapper objectMapper() {
             // returning a plain ObjectMapper, 
             // you can change this to configure the ObjectMapper as requiered
             return new ObjectMapper();
         }
    }
    
    
    @Controller
    @RequestMapping("/Index")
     public class ControllerClass {
    
       @Autowired
       private ObjectMapper objectMapper;
    
       @RequestMapping(value="/Result", 
                       method=RequestMethod.GET, 
                       produces="application/json")
       @ResponseBody
       public ResponseEntity<String> result(){
         List<Integer> result = new ArrayList<Integer>();
         result.add(1);
         result.add(2);
         String jsonResult = objectMapper.writer().writeValueAsString(result);
         // here you can store the json result before returning it;
         return new ResponseEntity<String>(jsonResult, HttpStatus.OK);
       }
    }
    

    编辑

    您还可以尝试定义一个HandlerInterceptor来捕获您感兴趣的请求的响应主体

    @Component
    public class RestResponseInterceptor implements HandlerInterceptor {
    
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
              // inspect response, etc...
         }
    }