【问题标题】:How to return a String value instead of java bean class from a spring controller如何从spring控制器返回一个字符串值而不是java bean类
【发布时间】:2018-12-31 18:10:15
【问题描述】:

我需要通过 angularjs 调用基于 Spring 控制器的 url,并将 Spring 控制器返回的响应打印到浏览器。
所以这是一个 PoC,其中主页包含一个按钮,当用户单击按钮时,它在内部调用一个函数,并在该函数中调用 Spring 控制器。
当消息被包装在 Java Bean Class 中时,它会显示消息并按原样返回 Java bean 类。
但是,当我从控制器返回直接字符串值时,它会在浏览器控制台中打印 undefined
我是 Angular+Spring 集成的新手,所以有什么方法可以从控制器直接返回 String/Integer obj。
我的控制器
-------------------

@RestController
public class MyController {

    @RequestMapping(value="/home")
    public ModelAndView showHome() {
        return new ModelAndView("home");
    }

    @RequestMapping(value="/getMessage",method=RequestMethod.GET,produces="application/json")
    public String getMessage() {
        /*Message msg= new Message();
        msg.setMesg("Hello From AngularJS");*/
        return "Hello From AngularJs";
    }

} 

注意- 我直接从控制器返回一个字符串值,而不是 Message 对象。
主页.jsp
-------------

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Home| Page</title>
<link rel="stylesheet" href='<c:url value="/main.css"></c:url>'>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script type="text/javascript">
    var app= angular.module("myApp",[]);
    app.controller("hello",function($scope,$http){
        $scope.getMessage= function(){
            $http({
                method: 'GET',
                url: 'getMessage'  /* Tried even with fully qualified url 'http://localhost:8080/AngularJs-Spring-HelloWorld/getMessage' */
                }).then(function successCallback(response){
                    $scope.user= response.data;
                },function errorCallback(response){
                    console.log(response.statusText);
                }); 

        }
    });
</script>
</head>
<body ng-app="myApp" ng-controller="hello">
    <div class="bb">
        <h2 style="color: orange;text-align: center;">Angularjs Spring MVC sample application!!</h2>
        <button style="text-align: center;" ng-click="getMessage()">Greet User</button>
        <p>{{user}}</p>
    </div>
</body>
</html>


如何从控制器返回字符串值并在浏览器中显示。有没有办法从控制器返回一个字符串值?
或者返回的字符串值将被视为在普通 spring-mvc 应用程序中处理的视图页面名称。

【问题讨论】:

  • 嗨,斯通!这不是 AngularJS 的问题,而是 Spring 特有的问题。您是说您的回复 produces="application/json" 但我不确定 Spring 是否可以像这样将 String 转换为 JSON。
  • 您可以尝试使用produces =“text/plain”而不是json吗?
  • @Unknown 谢谢它的工作,我可以为 produces 属性指定更多可能的值
  • 您可以使用文件中的任何媒体类型。 docs.spring.io/spring-framework/docs/current/javadoc-api/org/….

标签: angularjs spring spring-mvc


【解决方案1】:

在您的应用程序中导入 GSON jar 并更改您的 return 语句,然后您可以从 spring 控制器返回一个字符串。

@RequestMapping(value="/getMessage",method=RequestMethod.GET,produces="application/json")
    public String getMessage() {
        /*Message msg= new Message();
        msg.setMesg("Hello From AngularJS");*/
        return new GSON. toJson("Hello From AngularJs");
    }

类似地,如果你想要返回任何类型的 java bean,你可以将 bean 转换为 JSON 字符串并作为字符串返回,如下所示

@RequestMapping(value="/getMessage",method=RequestMethod.GET,produces="application/json")
        public String getMessage() {
            Message msg= new Message();
            msg.setMesg("Hello From AngularJS");
            return new GSON.toJson(msg);
        }

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2021-08-14
    • 2014-07-28
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多