我刚看了一篇博客文章,用银行类比来解释MVC.我有几个月使用MVC框架(CakePHP)进行Web应用程序开发的经验,所以我得到了基础知识,但我开始看到一个主题让我觉得我采用了一种有缺陷的方法来处理逻辑:
在我的应用程序中,模型是厌食症,控制器是肥胖的.我在控制器中有所有业务逻辑,除了模型中的关联和验证规则之外什么也没有.
通过我的控制器扫描,我现在可以识别出许多应该放在模型中的逻辑:
现在问我的问题:
我有一个Spring MVC Controller,它返回一个JSON String,我想将mimetype设置为application/json.我怎样才能做到这一点?
@RequestMapping(method=RequestMethod.GET, value="foo/bar")
@ResponseBody
public String fooBar(){
return myService.getJson();
}
Run Code Online (Sandbox Code Playgroud)
业务对象已经可以作为JSON字符串使用,因此使用MappingJacksonJsonView对我来说不是解决方案.@ResponseBody是完美的,但我怎样才能设置mimetype?
Spring注释是@Controller一样的@Service吗?
我知道@Controller哪些可以用于URL映射和调用业务逻辑.
而@Service用来注释包含业务逻辑服务类.
我可以使用@Controller而不是@Service注释Service类吗?
还有其他方法可以从控制器返回原始HTML吗?而不是仅使用viewbag.如下:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.HtmlOutput = "<HTML></HTML>";
return View();
}
}
@{
ViewBag.Title = "Index";
}
@Html.Raw(ViewBag.HtmlOutput)
Run Code Online (Sandbox Code Playgroud) Spring Security可以使用@PreAuthorizeSpring控制器方法吗?
我正在寻找有关.NET mvc控制器的有效单元测试的建议.
在我工作的地方,许多这样的测试使用moq来模拟数据层并断言某些数据层方法被调用.这似乎对我没用,因为它基本上验证了实现没有改变而不是测试API.
我还阅读了一些文章,建议检查返回的视图模型的类型是否正确.我可以看到提供一些价值,但仅凭它似乎不值得编写许多行代码的努力(我们的应用程序的数据模型非常庞大和复杂).
任何人都可以建议一些更好的控制器单元测试方法或解释为什么上述方法是有效/有用的?
谢谢!
我想知道是否有办法将参数传递给指令?
我想要做的是从控制器附加一个指令,如下所示:
$scope.title = "title";
$scope.title2 = "title2";
angular.element(document.getElementById('wrapper')).append('<directive_name></directive_name>');
Run Code Online (Sandbox Code Playgroud)
是否可以同时传递参数,以便我的指令模板的内容可以链接到一个或另一个范围?
这是指令:
app.directive("directive_name", function(){
return {
restrict:'E',
transclude:true,
template:'<div class="title"><h2>{{title}}</h3></div>',
replace:true
};
})
Run Code Online (Sandbox Code Playgroud)
如果我想使用相同的指令但使用$ scope.title2会怎么样?
关于这个主题已经有一些问题,但是没有任何响应可以提供参数来解释为什么我们不应该创建一个Spring MVC控制器Transactional.看到:
所以为什么?
背景:几年前,我在团队中使用C#/ NHibernate/Spring.Net实现了一个相当大的ERP软件.对服务器的往返实际上是这样实现的:事务在进入任何控制器逻辑之前打开,并在退出控制器后被提交或回滚.该交易在框架中进行管理,因此没有人必须关心它.这是一个出色的解决方案:稳定,简单,只有少数架构师不得不关心交易问题,团队的其他成员只是实现了功能.
从我的角度来看,这是我见过的最好的设计.当我尝试使用Spring MVC重现相同的设计时,我进入了一个带有延迟加载和事务问题的噩梦,每次都有相同的答案:不要让控制器进行事务处理,但为什么呢?
提前感谢您的答案!
考虑需要将纯文本文件从控制器方法返回给调用者.这个想法是下载文件,而不是在浏览器中查看为纯文本.
我有以下方法,它按预期工作.该文件将显示给浏览器以供下载,文件将填充该字符串.
我想寻找这种方法的"更正确"的实现,因为我对void返回类型不是很满意.
public void ViewHL7(int id)
{
string someLongTextForDownload = "ABC123";
Response.Clear();
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.hl7", id.ToString()));
Response.Write(someLongTextForDownload);
Response.End();
}
Run Code Online (Sandbox Code Playgroud) 我想知道,有任何技术,所以我们可以Model作为参数传递RedirectToAction
例如:
public class Student{
public int Id{get;set;}
public string Name{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
调节器
public class StudentController : Controller
{
public ActionResult FillStudent()
{
return View();
}
[HttpPost]
public ActionResult FillStudent(Student student1)
{
return RedirectToAction("GetStudent","Student",new{student=student1});
}
public ActionResult GetStudent(Student student)
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题 - 我可以在RedirectToAction中传递学生模型吗?
controller ×10
java ×3
spring-mvc ×3
asp.net-mvc ×2
spring ×2
angularjs ×1
arguments ×1
c# ×1
cakephp ×1
directive ×1
download ×1
json ×1
model ×1
return ×1
service ×1
unit-testing ×1